You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium点击页面后驱动未更新,无法获取新页面元素如何解决?

问题

我正在构建一个简单的网页爬虫,希望实现以下流程:在网页中输入数值,按下回车键,待新页面加载完成后抓取页面信息。目前,初始化加载网页、输入数值并按下回车键的操作均正常,但新页面加载后,driver似乎未更新状态,导致无法抓取新页面的信息。

相关代码如下:

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

我认为原因是原网页不存在该元素,而按下回车键加载的新页面包含该元素,但driver未更新状态,仍认为当前是原网页。请问该如何解决此问题?


解决方法

核心问题并非driver状态未更新,而是页面跳转后元素还未渲染完成就执行查找操作,同时你使用的绝对XPATH过于脆弱。以下是具体解决方案:

1. 添加显式等待确保元素加载

Selenium不会自动等待页面完全加载,按下回车后页面跳转需要时间,直接查找元素会因为元素未渲染报错。使用WebDriverWait等待目标元素出现后再操作:

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

# 按下回车后,等待目标元素加载,最长等待10秒
wait = WebDriverWait(driver, 10)
result = wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/section[1]/div/table/tbody/tr[2]/td[6]")))
print(result.text)

2. 替换为稳定的相对XPATH

绝对路径XPATH依赖页面完整结构,稍有变动就会失效。建议换成基于元素文本或属性的相对定位,比如目标元素是税后薪资行的第6列:

# 定位包含"Take Home"文本的行,再取第6列
result = wait.until(EC.presence_of_element_located((By.XPATH, "//tr[contains(td, 'Take Home')]/td[6]")))

3. 验证页面跳转完成(可选)

如果页面跳转后URL发生变化,可以先等待URL更新,再查找元素:

# 等待URL包含"results"(假设跳转后的URL有该关键词)
wait.until(EC.url_contains("results"))
# 再执行元素查找
result = driver.find_element(By.XPATH, "//tr[contains(td, 'Take Home')]/td[6]")

内容的提问来源于stack exchange,提问作者KGreen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:26:14