webdriver 反爬虫 (selenium反爬虫) 绕过

1. webdriver 反爬虫原理

爬虫程序可以借助渲染工具从动态网页中获取数据。

在这个过程中,"借助"其实是通过对应的浏览器驱动(即WebDriver)向浏览器发出指令的行为。因此,开发者可以根据客户端是否包含浏览器驱动这一特征来区分正常用户和爬虫程序。

webdriver 属性是我们最常听到的,通过 webdriver 驱动浏览器就会包含这一属性,因此可用来辨别爬虫程序(可检测的属性远不止这一种)。

WebDriver 检测的结果有3种,分别是true、false、undefined 。当我们使用的渲染工具有webdriver 属性时,navigator.webdriver 的返回值就是 true 。反之则会返回 false 或 undefine 。

由于 Selenium 通过 WebDriver 驱动浏览器,客户端的webdriver 属性存在,所以无法获得目标数据。注:Puppeteer 根据 DevTools 协议控制 Chrome 浏览器或 Chromium 浏览器,但 Puppeteer 也存在webdriver 属性。

执行以下代码,会导致 webdriver 属性检测不通过,如下图:

复制代码
from selenium.webdriver import Chrome

driver = Chrome()
url = 'https://bot.sannysoft.com/'
driver.get(url)

2. webdriver 识别绕过:方法 1

undetected_chromedriver 是一个防止浏览器指纹特征被识别的依赖库,使用 undetected_chromedriver.Chrome() 新建浏览器窗口,从而修改浏览器指纹特征。

注:可以使用 "pip install undetected-chromedriver" 安装这个 py 库。

执行以下代码,可通过 webdriver 属性检测,如下图:

复制代码
import undetected_chromedriver as uc

driver = uc.Chrome()
url = 'https://bot.sannysoft.com/'
driver.get(url)

3. webdriver 识别绕过:方法 2

原理:通过执行 driver.execute_cdp_cmd 命令,可以在网页加载前运行 js 代码,从而改变浏览器的指纹特征

因为 webdriver 属性置空 js 代码有更改,同时最好修改不止一个属性,因此直接使用开源分享的 js 代码比较方便。

js 文件网址:https://github.com/berstend/puppeteer-extra/blob/stealth-js/stealth.min.js

stealth.min.js 这个文件包含了常用的浏览器特征,我们只需要读取文件,然后执行即可。

执行以下代码,可通过 webdriver 属性检测,如下图:

复制代码
from selenium.webdriver import Chrome

driver = Chrome()
with open('stealth.min.js', encoding='utf-8') as f:
    driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': f.read()})  # 在页面刚加载的时候执行JavaScript语句
url = 'https://bot.sannysoft.com/'
driver.get(url)
相关推荐
zhangfeng113328 分钟前
合法爬虫四底线 法律边界
爬虫
S1998_1997111609•X3 小时前
论恶意注入污染蜜罐进程函数值取仺⺋以集团犯罪获取数据爬虫的轮系依据
网络·数据库·爬虫·网络协议·百度
大邳草民4 小时前
Python 爬虫:从 HTTP 请求到接口分析
笔记·爬虫·python
S1998_1997111609•X4 小时前
恶意注入污染蜜罐HDMI进程函数值进行封禁垃圾蠕虫仓蟲的轮系依据行为戆直㞢仓shell token
数据库·爬虫·网络协议·百度·开闭原则
测试员周周5 小时前
【AI测试系统】第6篇:需求扔进去,3 分钟出测试用例?AI测试系统的 RAG 知识增强实战
人工智能·python·功能测试·测试工具·测试用例
测试员周周5 小时前
【AI测试功能2】AI功能测试的“不可确定性“难题与应对思路:从精确断言到统计判定的完整方案
大数据·人工智能·python·功能测试·测试工具·单元测试·测试用例
huzhongqiang1 天前
Python全站链接爬取工具优化:支持过滤和断点续爬
后端·爬虫
测试员周周1 天前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试
弹简特1 天前
【精通Postman接口测试】02-集合变量|环境变量|全局变量,批量运行原来这么简单(附图文+CLI实战)
测试工具·接口测试·postman
李松桃1 天前
Python爬虫-实战
爬虫·python