Selenium自动化程序被检测为爬虫,怎么屏蔽和绕过

Selenium 操作被屏蔽

使用selenium自动化网页时,有一定的概率会被目标网站识别,一旦被检测到,目标网站会拦截该客户端做出的网页操作。

比如淘宝和大众点评的登录页,当手工打开浏览器,输入用户名和密码时,是能正常进入首页的,但是如果是通过selenium打开, 会直接提示验证失败,点击框体重试。

本文介绍一种办法,不需要修改浏览器属性,不需要注入JavaScript脚本,也能轻松绕过网站检测。

Selenium为何会被检测

每一个浏览器访问网站时,都会带上特定的指纹特征,网站会解析这些特征,从而判断这次访问是不是自动化程序。

一个最广为人知的特征是window.navigator.webdriver,该特征直接标明此浏览器是webdriver程序。当一个浏览器通过selenium启动后,在开发者工具中输入这个属性,会发现被标为 true, 而手工打开的浏览器是 false。

实际上,浏览器被检测为webdriver程序的特征并不止这一个,这意味着,就算你通过修改属性,也不一定能绕过网站的检测。

我们可以通过 sannysoft 来检测浏览器指纹,如果浏览器是通过selenium等自动化程序打开的,访问这个网址后会有很多特征暴露这些指纹,这些特征的值和手工打开后的值是不一样的,因此可以很轻易被别人检测出来。

有人也试图不用selenium,换成puppeter和playwright这样的自动化工具,但是结局都是一样的。

Selenium避免被检测方法

浏览器在启动时就会带上指纹特征,如果使用自动化程序启动时已经被标记,那为什么不直接用手工启动,然后用Selenium连接已经启动的浏览器呢?

那手工打开浏览器要做什么操作才能让Selenium连接呢?Selenium又是怎样连接手工打开的浏览器呢?概括起来:

1、打开浏览器时添加以下参数:

复制代码
--remote-debugging-port=9222 --user-data-dir="C:\\selenium\\ChromeProfile"

2、selenium中设置浏览器选项,通过上面设置的 9222端口连接浏览器:

python 复制代码
from selenium.webdriver.chrome.options import Options
 
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

通过 subprocess 运行浏览器

当然,做自动化程序一般不会手工点击图标来打开浏览器,我们可以用命令行启动浏览器,然后再用 selenium 连接。

python 复制代码
import subprocess
cmd = '"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" ' \\
'--remote-debugging-port=9222 ' \\
'--user-data-dir="C:\\selenium\\ChromeProfile"'
 
subprocess.run(cmd)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
七禾页丫2 小时前
面试记录12 中级c++开发工程师
c++·面试·职场和发展
llilian_163 小时前
总线授时卡 CPCI总线授时卡的工作原理及应用场景介绍 CPCI总线校时卡
运维·单片机·其他·自动化
小白学大数据3 小时前
Java 爬虫对百科词条分类信息的抓取与处理
java·开发语言·爬虫
sugar椰子皮5 小时前
【node源码-6】async-hook c层修改以及测试
爬虫
cver1236 小时前
足球视频检测数据集介绍-160张图片-智能体育转播 运动数据分析 自动化视频剪辑 裁判辅助系统 青训技术分析 虚拟现实体验
数据分析·自动化·音视频
七禾页丫6 小时前
面试记录12 软件(c++)工程师
c++·面试·职场和发展
北京耐用通信6 小时前
告别“蜘蛛网”接线!耐达讯自动化PROFIBUS 三路集线器让气缸布线“一拖三”的神操作
人工智能·物联网·网络协议·自动化·信息与通信
renke33648 小时前
Flutter 2025 测试工程体系:从单元测试到混沌演练,构建高可靠、可验证、自动化的质量保障闭环
flutter·单元测试·自动化
泽灯9 小时前
【postman】怎么通过curl看请求报什么错
功能测试·postman
卓码软件测评9 小时前
软件测试:如何在Postman中配置和自动化OAuth 2.0与JWT认证?
测试工具·单元测试·自动化·测试用例·postman·可用性测试