python 如何使用XPath抓取javascript网站值

p3rjfoxz  于 2023-01-12  发布在  Python
关注(0)|答案(2)|浏览(257)

我正尝试使用value的xpath变量从这个网站上抓取(在python中)储蓄利率。
我什么都试过了:beautifulsoup,selenium,etree,etc.我已经能够成功地抓取一些其他网站。然而,这个网站和许多其他网站都让我适合。我喜欢一个解决方案,可以抓取信息从几个网站,无论其格式使用xpath变量。
我当前的尝试:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

service = Service(executable_path="/chromedriver")
options = Options()
options.add_argument(' — incognito')
options.headless = True
driver = webdriver.Chrome(service=service, options=options)

url = 'https://www.americanexpress.com/en-us/banking/online-savings/account/'
driver.get(url)
element = driver.find_element(By.XPATH, '//*[@id="hysa-apy-2"]')
print(element.text)
if element.text == "":
    print("Error: Element text is empty")

driver.quit()
yqlxgs2m

yqlxgs2m1#

利率写在span元素中,所有包含利率的span元素共享相同的classheading-6,但是要记住,结果为每个利率返回两个span元素,每个元素对应一个不同的视口。
xpath选择器:

'//span[@class="heading-6"]'

也可以通过containing text APY获取元素:

'//span[contains(., "APY")]'


但是这个选择器查找DOM中包含单词APY的所有span元素。

3htmauhk

3htmauhk2#

如果发现唯一id,建议优先,如下所示:find_element(By.ID,'hysa-apy-2')喜欢@约翰·戈登评论。
但有时当元素找到时,文本尚未加载。
使用xpath并添加此逻辑and text()!=""

element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, '//span[@id="hysa-apy-2" and text()!=""]')))

导入后:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

相关问题