爬虫专栏:破解网站检测selenium反爬——“当前环境正在被调试“”

简介: 本文记录了一次Selenium爬虫被Gitee安全验证拦截的排查经历。爬虫运行一周后突然失效,频繁触发“安全验证”弹窗,尝试隐藏webdriver特征、更换IP、模拟人工操作等均无效。最终发现:手动访问Gitee完成验证后,环境风险标记解除,爬虫自动恢复正常。表明反爬机制针对的是“访问环境”而非工具本身,人工验证可快速解锁,为同类问题提供简洁高效的解决思路。

一、前言:爬虫突然“罢工”的突发状况

最近笔者在做一个开源项目分析的小工具,核心需求是通过Selenium自动化爬取Gitee平台上特定仓库的贡献者数据、提交记录等信息。这个爬虫脚本已经稳定运行了近一周,每天定时执行都能顺利获取数据。但就在前天,脚本突然彻底“罢工”——每次启动Selenium驱动Edge浏览器访问Gitee首页时,都会直接弹出“安全验证”提示框,无论等待多久都无法自动跳转,手动干预也无法正常进入网站,这让整个数据采集工作陷入停滞。

当时弹出的验证界面有两个关键状态:第一个是初始的安全验证弹窗,提示“检测到您的访问可能存在安全风险,请完成验证”,界面中央只有一个“确认”按钮,点击后不会立即跳转,而是进入第二个提示界面,明确显示“当前环境正在被测试”,随后便陷入无限加载状态,无法进入Gitee的正常页面。以下是当时截取的关键界面截图,完整记录了报错场景:

1.png
2.png

考虑到项目 deadlines临近,笔者立刻投入到问题排查中,前后尝试了多种主流的反反爬方案,过程颇为曲折,最终却被一个极其简单的方法意外解决,特此记录整个过程,希望能给遇到同类问题的开发者提供参考。

二、解决过程:那些“看似有效”的排查尝试

面对Gitee的反爬拦截,我的第一反应是Selenium的自动化特征被网站识别了。毕竟这类平台的反爬机制通常会针对自动化工具的独特标识进行检测,因此我优先从“隐藏Selenium特征”和“优化访问环境”两个方向展开尝试,每一步都做了详细的操作记录和结果验证。

1. 方向一:隐藏Selenium的自动化特征

查阅资料可知,Selenium驱动浏览器时会留下一些明显的“指纹”,比如Chrome/Edge浏览器的window.navigator.webdriver属性会被设置为true,这是很多反爬机制的核心检测点。为此我针对性地添加了一系列反检测参数,具体操作如下:

  • 添加浏览器启动参数:在初始化EdgeDriver时,配置了--excludeSwitches=enable-automation(禁用自动化提示)、--disable-blink-features=AutomationControlled(禁用自动化控制特征)等参数,同时关闭了浏览器的扩展程序和预加载功能,代码片段如下:

from selenium import webdriver
from selenium.webdriver.edge.options import Options

edge_options = Options()
# 隐藏自动化提示
edge_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 禁用自动化控制特征
edge_options.add_argument('--disable-blink-features=AutomationControlled')
# 关闭扩展
edge_options.add_argument('--disable-extensions')
# 禁用预加载
edge_options.add_argument('--no-first-run')

driver = webdriver.Edge(options=edge_options)
  • 修改webdriver属性:通过执行JavaScript代码,强制将window.navigator.webdriver设置为undefined,试图绕过前端检测:

driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
   
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})

然而,即使完成了上述配置,重启爬虫后问题依然存在——安全验证弹窗还是会准时出现,webdriver属性的修改并未起到预期效果。我通过在浏览器控制台手动查看该属性,确认修改已生效,这说明Gitee的检测机制可能不止依赖前端的webdriver标识。

2. 方向二:优化网络环境与访问策略

排除了Selenium特征的问题后,我猜测可能是IP地址被Gitee标记为“风险IP”。毕竟爬虫脚本每天会发起上百次请求,虽然已经做了10秒以上的请求间隔,但仍有可能触发频率限制。为此我尝试了以下几种网络调整方案:

  • 切换本地网络:将电脑网络从家庭WiFi切换到手机热点,使用移动数据网络访问Gitee。此时IP地址已完全更换,但启动爬虫后依然弹出安全验证,排除了单一IP被封禁的可能。

  • 使用VPN切换地区:启用常用的VPN工具,将节点切换至北京、上海等不同城市的服务器,再次尝试爬虫访问。结果依旧不理想,安全验证弹窗没有任何变化,甚至出现了“地区访问限制”的附加提示。

  • 降低请求频率与模拟人工操作:在脚本中添加了随机请求间隔(15-25秒),同时加入了模拟鼠标移动、随机点击页面空白处等操作,试图让访问行为更贴近人工。但这些优化措施同样未能突破拦截,点击安全验证的“确认”按钮后,还是会陷入“当前环境正在被测试”的无限加载。

连续尝试多种方案均告失败后,我开始怀疑问题是否出在浏览器本身或者系统环境上,甚至尝试更换了Chrome浏览器和对应的ChromeDriver,但最终的拦截结果完全一致,这让排查陷入了僵局。

三、最终解决方案、

在所有技术手段都尝试无果后,我抱着“死马当活马医”的心态,决定放弃Selenium,直接用手动方式访问Gitee网站,看看是否能发现一些线索。没想到这个看似“无用”的操作,却成了破解问题的关键。

具体操作过程非常简单:关闭了所有通过Selenium启动的浏览器窗口,直接双击桌面的Edge浏览器图标,在地址栏输入Gitee的官方网址(https://gitee.com/)。令人意外的是,手动访问时同样弹出了最初的安全验证弹窗——这说明问题可能不是Selenium专属的,而是当前设备或浏览器环境被Gitee标记了风险。

我点击了弹窗中的“确认”按钮,与Selenium自动化访问不同的是,这次页面仅加载了大约3-5秒,就顺利通过了验证,直接跳转到了Gitee的登录界面。登录后我测试了浏览仓库、查看提交记录等操作,所有功能都完全正常,没有再出现任何拦截提示。以下是手动访问成功进入网站的截图:

3.png

惊喜的是,在手动访问通过验证后,我重新启动了之前的Selenium爬虫脚本,发现安全验证弹窗竟然消失了,爬虫能够正常访问Gitee并获取数据,就像之前从未出现过问题一样。

四、原因分析与经验总结

结合整个排查过程和最终结果,我推测Gitee的反爬机制采用了“环境风险标记+人工验证解锁”的逻辑:

  1. 最初由于爬虫的高频访问,我的浏览器环境(可能关联了Cookie、浏览器指纹等信息)被Gitee标记为“高风险”,无论后续是通过Selenium还是自动化工具访问,都会触发强制安全验证。

  2. Gitee的安全验证机制能够区分“自动化操作”和“人工操作”,当我通过手动点击完成验证后,系统判定该环境为“合法人工使用”,从而解除了风险标记,后续即使使用Selenium访问,也不会再触发拦截。

核心经验总结:遇到自动化工具被网站拦截时,不要局限于技术层面的反检测优化,不妨先通过手动访问的方式完成网站的安全验证,很多时候网站的风险标记是针对“环境”而非“工具”,人工验证后即可解锁工具的正常使用,这比复杂的技术配置更高效。

目录
相关文章
|
2月前
|
人工智能 运维 监控
开源项目分享:Gitee热榜项目 2025年12月第二周 周榜
本文档汇总Gitee本周热门开源项目,涵盖Fay、JeeLowCode等明星项目,结合AI与低代码趋势,深入分析技术融合与场景创新,助力开发者把握前沿动态。
299 2
|
数据采集 Web App开发 存储
Selenium库编写爬虫详细案例
Selenium库编写爬虫详细案例
|
2月前
|
存储 人工智能 自然语言处理
LlamaIndex 深度实战:用《长安的荔枝》学会构建智能问答系统
本文深入浅出地讲解了RAG(检索增强生成)原理与LlamaIndex实战,通过《长安的荔枝》案例,从AI如何“读书”讲起,详解三大关键参数(chunk_size、top_k、overlap)对问答效果的影响,并结合真实实验展示不同配置下的回答质量差异。内容兼顾新手引导与进阶优化,帮助读者快速构建高效的文档问答系统。
578 22
LlamaIndex 深度实战:用《长安的荔枝》学会构建智能问答系统
|
2月前
|
运维 监控 数据挖掘
运维数据分析:别再只会翻日志了,真正的价值在“洞察”
运维数据分析:别再只会翻日志了,真正的价值在“洞察”
131 16
|
2月前
|
数据采集 人工智能 运维
AgentRun 实战:快速构建 AI 舆情实时分析专家
搭建“舆情分析专家”,函数计算 AgentRun 快速实现从数据采集到报告生成全自动化 Agent。
870 56
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS收费价格:最新MySQL、SQL Server、PostgreSQL和MariaDB收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL和MariaDB,多种引擎任选。基础版优惠价低至88元/年,如MySQL倚天版1核2G仅需88元,SQL Server 2核4G 299元/年,PostgreSQL 2核4G 227元/年,高性价比,弹性可扩展,安全稳定,详情可查官方活动页面。
405 1
|
2月前
|
搜索推荐 API 开发者
支持"同款搜索"(精确匹配)和"相似搜索"(模糊匹配)两种模式
图搜接口对图片的一个要求:图片不要大于2兆,600*600像素大小,要符合系统规则,图片尽量清晰, 图片越小越好,处理API返回的错误码和异常情况。
|
2月前
|
缓存 监控 开发者
Python装饰器:让代码更简洁优雅
Python装饰器:让代码更简洁优雅
183 115
|
3月前
|
存储 人工智能 自然语言处理
AI 十大论文精讲(五):RAG——让大模型 “告别幻觉、实时更新” 的检索增强生成秘籍
本文解读AI十大核心论文之五——《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》。该论文提出RAG框架,通过“检索+生成”结合,解决大模型知识更新难、易幻觉、缺溯源等问题,实现小模型高效利用外部知识库,成为当前大模型落地的关键技术。
1156 155
|
2月前
|
存储 文字识别 数据可视化
实用代码工具:Python打造PDF选区OCR / 截图批量处理工具(支持手动/全自动模式)
一款基于Python的PDF区域OCR与截图工具,支持精准框选、文字识别、图片截取及Excel一键导出。内置手动审核与全自动批量处理模式,结合PyMuPDF、easyocr等技术,实现高效、可视化的PDF数据提取,适用于发票、报表等场景,显著提升办公效率。
379 11