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

Selenium结合Tor代理火狐点击Show more按钮报TimeoutException如何解决

问题根因

你的报错触发在等待cookie同意按钮可见的代码行,Tor网络延迟普遍较高,再加上你观察到的弹窗半透明加载异常,按钮12秒内没有达到完全可见的状态,WebDriverWait超时直接抛出异常。另外你提供的代码还有2处隐含问题:

  • 缺少必要的模块导入:time、By、expected_conditions都没有导入,运行时也会触发报错
  • Show more点击逻辑没有处理元素过期问题:首次点击后页面刷新,之前获取的元素引用会失效,后续操作容易触发StaleElementReferenceException

修复方案

1. 补充缺少的导入项

在自动点击代码最顶部加入以下导入:

import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

2. 优化cookie弹窗处理逻辑

不强制等待按钮可见,改为判断元素存在后用JS点击,绕过可见性限制,就算弹窗半透明也能正常触发点击:

# 处理cookie弹窗,最多等5秒,找不到就跳过
try:
    cookie_btn = WebDriverWait(driver, 5).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "button#onetrust-accept-btn-handler"))
    )
    # 用JS点击绕过可见性要求
    driver.execute_script("arguments[0].click();", cookie_btn)
    time.sleep(1)
except:
    # 弹窗没加载出来直接跳过,不阻塞后续逻辑
    pass

3. 重写Show more点击逻辑

每次循环都重新获取最新的按钮元素,用显示等待代替固定等待,提升稳定性:

while True:
    try:
        # 等待Show more按钮加载出来
        show_more = WebDriverWait(driver, 8).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.event__more.event__more--static'))
        )
        # 滚动到按钮位置
        driver.execute_script("arguments[0].scrollIntoView();", show_more)
        time.sleep(0.5)
        # JS点击,避免被遮罩阻挡
        driver.execute_script("arguments[0].click();", show_more)
        # 等待新内容加载完成
        time.sleep(3)
    except:
        # 找不到按钮就退出循环
        break

可选优化

如果Tor网络延迟波动大,可以把WebDriverWait的超时时间从12秒调整到15-20秒,进一步降低超时概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:36:03