Chrome 102.0.5005下如何使用Selenium驱动点击指定<a>标签链接?
相关参考信息
- 测试页面:Naver英汉词典practice搜索结果页
- 待点击链接效果:

- 目标元素HTML结构:

- 运行报错截图:

原有实现代码如下,执行后无法完成跳转、触发异常:
word_link=driver.find_element_by_xpath('//*[@id="searchPage_entry"]/div/div[1]/div[1]/a') word_link.click()
报错产生原因
- 定位API已废弃:
find_element_by_xpath是Selenium 3时代的旧写法,Selenium 4及以上版本已经完全移除该系列方法,直接调用会抛出方法不存在的异常。 - 定位规则鲁棒性差:使用从根节点开始的绝对XPath路径,只要页面加载时插入广告位、推荐模块、提示弹窗导致DOM层级变化,就会定位到错误元素,或者直接找不到元素。
- 元素状态不满足点击要求:代码执行时如果页面还没加载完成,目标链接上方覆盖着加载遮罩、cookie授权弹窗、浮动广告,或者元素还没渲染到可交互状态,直接调用
.click()就会触发点击拦截异常。
正确实现代码
- 先导入需要的依赖模块
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time
- 用显式等待+稳定定位规则,等元素可点击后再操作
# 初始化显式等待,最长等待10秒 wait = WebDriverWait(driver, 10) # 用CSS选择器做相对定位,只锚定搜索结果词条区域内的第一个单词链接,不受外层DOM变动影响 word_link = wait.until(EC.element_to_be_clickable( (By.CSS_SELECTOR, "#searchPage_entry .entry:first-child .word a") ))
- 处理遮挡问题,完成点击
如果页面无遮挡,直接调用点击即可:
word_link.click()
如果存在浮动广告、弹窗遮挡导致点击失败,二选一处理即可:
- 方案1:先滚动到元素位置再点击
# 把元素滚动到页面中间位置,避开顶部/底部浮动栏遮挡 driver.execute_script("arguments[0].scrollIntoView({block: 'center'});", word_link) time.sleep(0.3) # 等待滚动动画完成 word_link.click()
- 方案2:直接用JS触发点击,绕过前端点击拦截
driver.execute_script("arguments[0].click();", word_link)
- 点击后跳转新标签页,需要切换窗口句柄才能操作新页面
# 获取当前浏览器所有打开的窗口句柄 all_windows = driver.window_handles # 切换到最新打开的标签页 driver.switch_to.window(all_windows[-1])
内容的提问来源于stack exchange,提问作者Jang Hyewon
相关产品推荐
相关产品推荐

