Python Selenium页面正常加载但WebDriverWait超时无法获取数据
问题排查修复方案
- 调整超时等待时长,你当前设置的3秒对于境外站点来说过短,受网络波动影响很容易出现页面未加载完成就触发超时的情况,建议先调整到10~15秒测试:
delay = 15 - 替换绝对XPath为稳定性更高的相对XPath,你当前使用的从html根节点开始的全路径定位规则容错性极低,页面DOM结构稍有变动就会匹配失败。可以根据元素的文本、属性特征编写更通用的定位规则,示例如下:
# 可根据目标元素的实际文本内容调整匹配规则 name = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.XPATH, '//strong[contains(text(),"Roto-Rooter Plumbing & Water Cleanup")]'))) - 验证是否被反爬策略拦截,先关闭无头模式运行代码,触发超时后打印当前页面的完整源码,确认目标元素是否真的存在于Selenium拿到的页面DOM中。部分站点会检测爬虫特征返回拦截页,此时即使你手动在浏览器中能看到对应元素,Selenium拿到的页面内容也是不包含目标元素的。
- 确认目标元素是否嵌套在iframe或shadow DOM中,如果元素属于iframe内部,需要先调用
driver.switch_to.frame()切换到对应iframe后再执行定位操作。 - 可尝试更换元素等待条件,将
presence_of_element_located替换为visibility_of_element_located,前者仅判断元素存在于DOM树,后者会额外确认元素可见,适配部分懒加载渲染的页面场景。
内容的提问来源于stack exchange,提问作者Justin Benfit
相关产品推荐
相关产品推荐

