在selenium中单击页面后获取驱动程序更新

问题描述 投票:0回答:1

我正在尝试构建一个简单的网络爬虫。我希望它通过在网页中输入一个值,单击 Enter,然后在加载后抓取新页面来工作。

到目前为止,最初加载网页,输入值并单击输入有效,但在加载新页面时驱动程序似乎没有更新,因此我可以抓取新页面以获取信息。

有人知道如何让这个功能发挥作用吗?

代码如下:

import selenium.webdriver 
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

test_wage = float(53109.22)

options = selenium.webdriver.FirefoxOptions()
options.add_argument("--headless")
driver = selenium.webdriver.Firefox(options=options)
driver.get('https://www.thesalarycalculator.co.uk/salary.php')

takehome_form = driver.find_element(By.CLASS_NAME, "hero__input")
takehome_form.send_keys(test_wage)
takehome_form.send_keys(Keys.RETURN)

上面的代码工作正常,我遇到的问题如下:

result = driver.find_element(By.XPATH, "/html/body/section[1]/div/table/tbody/tr[2]/td[6]")

这会产生以下错误:

NoSuchElementException: Unable to locate element: /html/body/section[1]/div/table/tbody/tr[2]/td[6]; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception

再次,我认为是因为原来的网页没有这个信息,但是在表单上点击回车并加载新页面后的新网页确实有这个信息,但是驱动程序没有更新并认为原来的网页是打开的仍然。

有人知道如何解决这个问题吗?

python selenium-webdriver selenium-firefoxdriver
1个回答
0
投票

可能是因为网页加载时间的原因。你应该添加这个:

WebDriverWait(driver, 10).until( EC.presence_of_element_located(By.XPATH, "/html/body/section[1]/div/table/tbody/tr[2]/td[6]"))

或者只是

WebDriverWait(driver, 10)

© www.soinside.com 2019 - 2024. All rights reserved.