Selenium爬取BscScan页面点击Age按钮触发Timeout异常解决求助
你遇到的超时异常核心原因有两个:
- 使用了绝对路径XPath定位Age按钮,页面动态加载的元素(比如广告、弹窗、其他动态插入的DOM节点)会改变页面整体结构,导致绝对路径匹配不到目标元素,最终触发超时。
- 切换到iframe后没有等待Age按钮完全加载到可点击状态,就直接执行了点击操作。
解决方案
替换原有切换iframe后的点击逻辑,改用稳定的相对路径定位+显式等待,修改后的代码片段如下:
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "dextrackeriframe"))) # 等待Age列的按钮可点击后执行点击 wait.until(EC.element_to_be_clickable((By.XPATH, "//th/a[text()='Age']"))).click() # 可选:点击后等待表格第一行数据加载完成,避免后续获取表格大小的时候取值不准 wait.until(EC.visibility_of_element_located((By.XPATH, "//tbody/tr[1]/td[1]")))
额外优化建议
- 不要使用绝对路径XPath(
/html/开头的路径),只要页面DOM结构有微小变动就会定位失效,优先使用元素自身特征、相对路径做定位。 - 如果网络环境较差,可适当调高WebDriverWait的超时时间,比如从20秒调整为30秒,减少超时概率。
- 可以给点击操作加上简单的重试逻辑,避免偶发的页面加载波动导致点击失败:
# 点击Age按钮重试逻辑示例 retry_count = 3 while retry_count > 0: try: wait.until(EC.element_to_be_clickable((By.XPATH, "//th/a[text()='Age']"))).click() break except TimeoutException: retry_count -= 1 driver.refresh() # 刷新后重新处理cookie同意、切换iframe的逻辑即可
内容的提问来源于stack exchange,提问作者hengjuice
相关产品推荐
相关产品推荐

