让Selenium等待文本可用



我正在使用Selenium从这个网站上抓取一些数据:https://www.boerse-frankfurt.de/en/etf/ishares-core-s-p-500-ucits-etf-usd-acc

我的脚本可以工作,但我需要强制5秒的等待时间来确保数据实际上是可用的,否则我有时(随机(会得到一个空白结果。

driver.get(url)
time.sleep(5)
bid = driver.find_element_by_xpath("/html/body/app-root/app-wrapper/div/div[2]/app-etp/div[2]/div[3]/div[2]/div/div[2]/app-widget-quote-box/div/div/table/tbody/tr[3]/td[1]").text
print(bid)

我尝试使用Selenium的等待函数,但脚本运行得很快,结果为空:

driver.get(url)
try:
bid = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH,"/html/body/app-root/app-wrapper/div/div[2]/app-etp/div[2]/div[3]/div[2]/div/div[2]/app-widget-quote-box/div/div/table/tbody/tr[3]/td[1]"))
)
bid = bid.text
print(bid)
finally:
pass

你知道如何让Selenium只等待刮取数据所需的时间吗?感谢


更新:一个简单的while循环似乎有效:

driver.get(url)
while driver.find_element_by_xpath(xpath).text == "":
pass
driver.find_element_by_xpath(xpath).text

有更好的方法吗?

要定位可见元素而不是presence_of_element_located((,您需要诱导WebDriverWait等待可见_of_eelement_located

driver.get(url)
try:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "/html/body/app-root/app-wrapper/div/div[2]/app-etp/div[2]/div[3]/div[2]/div/div[2]/app-widget-quote-box/div/div/table/tbody/tr[3]/td[1]"))).text)
finally:
pass

相关内容

  • 没有找到相关文章

最新更新