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端口连接浏览器:

from selenium.webdriver.chrome.options import Optionschrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(options=chrome_options)

通过 subprocess 运行浏览器

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

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)

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows和liunx对比及Linux分类

windows一定比liunx差吗,这绝对是天大误解,不是说你常用的开始是liunx就代表windows差 windows和liunx对比 有人说Linux性能远高于Windows,这个笔者是不认可的,给Linux套上一个图形界面,你再使劲美化一下&#xff0c…

逆向7通用寄存器

MOV指令前后的容器宽度要一致 如ECX与EAX 都是32位 mov eax,0x111 可以少写后面补零多写的会移除 源操作数是后面的 目标操作数是前面的 32位和64位寻址宽度 是查找内存宽度的范围 每一个编号对应一个字节 即内存宽度 32位是4g 64位大的多 0x123456是临时数

光缆通信有什么特点?

光缆由一个或多个光纤组成,每个光纤由一个非常纤细的玻璃或塑料纤维组成,可以传输光信号的高速数据。光缆通信具有以下特点: 1. 高带宽:光缆通信可以提供非常高的带宽,远远超过传统的铜缆通信。光纤的宽带特性使其能够…

Ansible刚安装完后执行报错

1. "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this hosts fingerprint to your known_hosts file to manage this host." 解决: …

自动驾驶代客泊车360环式系统及倒车雷达功能规范

1. 文档总概. 8 1.1. 范围. 8 1.2. 名词解释. 8 1.3. 相关应用文档. 8 1.3.1. 文档优先说明. 8 1.3.2. 政府法规与文件. 9 1.3.3. 行业规范与文件. 9 1.3.4. 百度及客户提供相关功能定义文档. 9 2. 系统概述. 10 2.1. …

【PixPin】比Snipaste、QQ的截图长图和动图还好用的截图工具

1.下载地址—— 下载地址 2.下载压缩包 双击exe文件运行 按默认的来 中文安装 选择安装路径 下一步,安装 安装完成,可以自己设置快捷键

git新建分支并提交

1. 打开终端 2. 定位到你的Git仓库 使用‘cd’命令进入Git项目目录 cd path/to/your/repo3. 创建新分支 使用git branch命令创建一个新的分支。例如,如果你想创建一个名为“feature-branch”的新分支,你会使用: git branch feature-bran…

Python游戏开发:Pygame框架与实例

随着Python语言的普及和游戏开发技术的进步,越来越多的开发者选择Python作为游戏开发的首选语言。Pygame是一个非常流行的Python游戏开发框架,它提供了丰富的功能和易于使用的API,使得开发者可以快速地构建游戏。 一、Pygame框架简介 Pygam…

python画房子

前言 今天,我们来用Python画房子。 一、第一种 第一种比较简单。 代码: import turtle as t import timedef go(x, y):t.penup()t.goto(x, y)t.pendown() def rangle(h,w):t.left(180)t.forward(h)t.right(90)t.forward(w)t.left(-90)t.forward(h) de…

Vue3的 响应式数据

在Vue3中,响应式数据使用ref和reactive函数来创建。 使用ref函数创建响应式数据: import { ref } from vueconst count ref(0) // 创建一个响应式数据count并初始化为0console.log(count.value) // 访问响应式数据需要使用.value属性count.value // 修…

Android通知---创建通知(附加代码)

1. 创建基本通知 (1) 创建基本通知 NotificationCompat.Builder builder new NotificationCompat.Builder(this, "channel_id").setSmallIcon(R.drawable.notification_icon) .setContentTitle("textTitle") .setContentText("text…

ubuntu查看内存使用情况命令

命令简介 在Ubuntu系统中,可以使用终端命令来查看电脑的内存使用情况。打开终端并输入以下命令: free -h 该命令可用于查看系统中内存的总量、已使用的内存、空闲的内存及缓冲区使用的内存。其中“-h”选项用于以人类可读的格式显示内存大小。执行该命…

YOLOv8-Seg改进:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:OREPA在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家…

虽迟但到!MySQL 可以用 JavaScript 写存储过程了!

任何能用 JavaScript 来干的事情,最终都会用 JavaScript 来干 背景 不久前,Oracle 在 MySQL 官方博客官宣了在 MySQL 中支持用 JavaScript 来写存储过程。 最流行的编程语言 最流行的数据库。程序员不做选择,当然是全都要。 使用方法 用 J…

Docker部署情侣恋爱网站

个人名片: 对人间的热爱与歌颂,可抵岁月冗长🌞 个人主页👨🏻‍💻:念舒_C.ying 个人博客🌏 :念舒_C.ying 情侣恋爱网站 1. 修改代码2. 目录结构3. 编写Dockerfile4. 编写d…

基于ssm的物流信息管理系统论文

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 车速预测 | Matlab基于RBF径向基神经网络的车速预测模型(多步预测,尾巴图) 程序设计 完整程序和数据获取方式:私信博主回复Matlab基于RBF径向基神经网络的车速预测模型…

软件测试|MySQL中的GROUP BY分组查询,你会了吗?

MySQL中的GROUP BY分组查询:详解与示例 在MySQL数据库中,GROUP BY语句用于将数据按照指定的列进行分组,并对每个分组执行聚合函数操作。这就是的我们可以在查询中汇总数据并生成有意义的结果。本文将深入介绍MySQL中的GROUP BY语句&#xff…

2023年度总结:但行前路,不负韶华

​ 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS &#x…

k8s部署mongodb-sharded7.X集群(多副本集)

#mongodb-sharded 7.X版本CHART NAME: mongodb-sharded CHART VERSION: 7.0.5 APP VERSION: 7.0.2helm repo add bitnami https://charts.bitnami.com/bitnami helm pull bitnami/bitnami/mongodb-sharded --untar默认副本数较多。我修改为33 搜索关键字replicaCount 修改 最后…