我正在尝试构建一个简单的网络爬虫。我希望它通过在网页中输入一个值,单击 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
再次,我认为是因为原来的网页没有这个信息,但是在表单上点击回车并加载新页面后的新网页确实有这个信息,但是驱动程序没有更新并认为原来的网页是打开的仍然。
有人知道如何解决这个问题吗?
可能是因为网页加载时间的原因。你应该添加这个:
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)