Selenium按钮点击失效问题排查(Python Web自动化)
问题描述
我正在开展政治献金相关研究,需要从FEC的支出数据页面获取数据。操作流程是点击页面上的"Export"按钮,再点击弹出的"Download"按钮。我的代码最初能正常运行几次,但之后随机失效,期间未修改代码。
以下是我的代码片段:
link = f'https://www.fec.gov/data/disbursements/?committee_id={committee_id}&two_year_transaction_period=2024&data_type=processed' driver.get(link) # click export button export = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".js-export.button.button--cta.button--export"))) print(f"Found: {export.tag_name} - {export.text}") current_time = time.strftime("%Y-%m-%dT%H_%M_%S", time.localtime()) driver.execute_script("arguments[0].click()", export) time.sleep(10)
程序总能定位到按钮,但约3次尝试后就无法成功点击,请问网站会拦截Python Selenium的Web自动化及按钮点击操作吗?
分析与解决建议
是的,这类政府数据网站普遍配备反自动化机制,你的情况大概率是触发了网站的反爬策略——即使能定位到元素,点击操作也会被后台拦截。
可以尝试这些优化方案:
- 改用原生点击并模拟真实操作节奏:替换
execute_script点击为Selenium原生的export.click(),操作前加入随机短等待(比如import random; time.sleep(random.uniform(1,3))),避免机械性操作被识别。 - 伪装浏览器指纹:使用
undetected-chromedriver替代普通ChromeDriver,它能自动隐藏webdriver特征,绕过常见的反爬检测。 - 降低请求频率:延长每次操作后的等待时间,或设置固定的请求间隔,避免短时间内频繁访问触发拦截阈值。
- 检查是否出现验证码:失效时手动打开对应页面,确认是否弹出验证码。若有,需添加验证码处理逻辑(如对接打码平台或手动验证)。
- 优先使用官方API:FEC提供官方数据API,直接调用API获取数据比模拟点击下载更稳定合规,完全规避反爬问题。
内容的提问来源于stack exchange,提问作者Hariaksha Gunda
相关产品推荐
相关产品推荐

