当前位置: 首页 > news >正文

DrissionPage防检测

DrissionPage 是一款基于 Python 的全能型网页自动化工具,创新性地将浏览器自动化直接 HTTP 请求两大模式完美融合。它不仅具备 Selenium 的动态页面处理能力,还拥有 requests 的高效特性,堪称爬虫开发者的瑞士军刀。

随着反爬技术的不断更新,爬虫程序被检测出来的概率也越来越高,因此绕过反爬检查的手段也越来越多,本文以主要解决DrissionPage检查问题,从而绕过网站检测。

注:使用本代码所产生的一切后果与作者无关!!!

from DrissionPage import ChromiumPage
# 初始化浏览器配置
co = ChromiumOptions()
# 创建页面实例
page = ChromiumPage(co)
page.get('https://www.baidu.com/')
page.refresh()
page.wait(2)

这是一段简单的自动化代码,目的是前往百度;代码无任何伪装,因此有被检测出自动化程序的风险。因此,我们添加伪装代码。

1、反检测方法一

# 初始化浏览器配置
co = ChromiumOptions()
co.incognito()  # 匿名模式
# 关键:使用改进的无头模式配置,避免被检测
co.set_argument("--headless=new")  # 使用新的无头模式(Chrome 112+)
co.set_argument("--disable-blink-features=AutomationControlled")  # 禁用自动化特征
co.set_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
# 模拟真实浏览器窗口特征
co.set_argument("--window-size=1920,1080")
co.set_argument("--no-sandbox")
co.set_argument("--disable-dev-shm-usage")
co.set_argument("--disable-gpu")
co.set_argument("--enable-webgl")
co.set_argument("--ignore-gpu-blocklist")
co.set_argument("--enable-automation=false")  # 伪装非自动化
co.set_argument("--remote-debugging-port=9222")  # 模拟开发者工具

通过添加相应的参数信息,模拟真实的浏览器,从而绕过目标网站的检测,保证自动化程序的正常运行。

2、反检测方法二

page_instance = ChromiumPage(co)
page_instance.listen.start('functionId=getPaimaiRealTimeData')
page_instance.get(start_url)
# 增强版反检测JS,重点绕过无头模式特征检测
page_instance.run_js("""// 1. 补充无头模式缺失的window属性if (!window.chrome) {window.chrome = {app: { isInstalled: false },webstore: {},runtime: { PlatformOs: { WIN: 'win' }, enable: () => {}, lastError: null }};}// 2. 修复无头模式下的navigator特征Object.defineProperty(navigator, 'webdriver', { get: () => undefined });Object.defineProperty(navigator, 'plugins', { get: () => [{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer' },{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai' }] });Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh', 'en-US'] });Object.defineProperty(navigator, 'maxTouchPoints', { get: () => 5 });  // 模拟触摸屏// 3. 修复屏幕和设备特征Object.defineProperty(screen, 'availTop', { get: () => 0 });Object.defineProperty(screen, 'availLeft', { get: () => 0 });Object.defineProperty(screen, 'colorDepth', { get: () => 24 });Object.defineProperty(screen, 'pixelDepth', { get: () => 24 });// 4. 移除自动化痕迹delete window.__webdriver_evaluate;delete window.__driver_evaluate;// 5. 模拟真实浏览器的API实现window.matchMedia = window.matchMedia || function() {return { matches: false, addListener: () => {}, removeListener: () => {} };};""")

通过添加JS功能代码,绕过检查,这种方式一般更加强大,比起方法一,此方式被检测出来的概率更低。

3、完整代码

通常建议两种方式结合在一起使用,毕竟有备无患。

# 初始化浏览器配置
co = ChromiumOptions()
co.incognito()  # 匿名模式
# 关键:使用改进的无头模式配置,避免被检测
co.set_argument("--headless=new")  # 使用新的无头模式(Chrome 112+)
co.set_argument("--disable-blink-features=AutomationControlled")  # 禁用自动化特征
co.set_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
# 模拟真实浏览器窗口特征
co.set_argument("--window-size=1920,1080")
co.set_argument("--no-sandbox")
co.set_argument("--disable-dev-shm-usage")
co.set_argument("--disable-gpu")
co.set_argument("--enable-webgl")
co.set_argument("--ignore-gpu-blocklist")
co.set_argument("--enable-automation=false")  # 伪装非自动化
co.set_argument("--remote-debugging-port=9222")  # 模拟开发者工具
# 创建页面实例
page_instance = ChromiumPage(co)
page_instance.listen.start('functionId=getPaimaiRealTimeData')
# 模拟自动化跳转百度
page_instance.get(https://www.baidu.com/)
# 增强版反检测JS,重点绕过无头模式特征检测
page_instance.run_js("""// 1. 补充无头模式缺失的window属性if (!window.chrome) {window.chrome = {app: { isInstalled: false },webstore: {},runtime: { PlatformOs: { WIN: 'win' }, enable: () => {}, lastError: null }};}// 2. 修复无头模式下的navigator特征Object.defineProperty(navigator, 'webdriver', { get: () => undefined });Object.defineProperty(navigator, 'plugins', { get: () => [{ name: 'Chrome PDF Plugin', filename: 'internal-pdf-viewer' },{ name: 'Chrome PDF Viewer', filename: 'mhjfbmdgcfjbbpaeojofohoefgiehjai' }] });Object.defineProperty(navigator, 'languages', { get: () => ['zh-CN', 'zh', 'en-US'] });Object.defineProperty(navigator, 'maxTouchPoints', { get: () => 5 });  // 模拟触摸屏// 3. 修复屏幕和设备特征Object.defineProperty(screen, 'availTop', { get: () => 0 });Object.defineProperty(screen, 'availLeft', { get: () => 0 });Object.defineProperty(screen, 'colorDepth', { get: () => 24 });Object.defineProperty(screen, 'pixelDepth', { get: () => 24 });// 4. 移除自动化痕迹delete window.__webdriver_evaluate;delete window.__driver_evaluate;// 5. 模拟真实浏览器的API实现window.matchMedia = window.matchMedia || function() {return { matches: false, addListener: () => {}, removeListener: () => {} };};""")

防止检测的方式有很多,本文仅介绍这两种,更多方式请自行查找。

注:使用本文代码应在不违反法律的前提下进行。

http://www.dtcms.com/a/457219.html

相关文章:

  • 三亚官方网站建设ps如何做网页设计
  • Java体系总结——从基础语法到微服务
  • 深圳网站建设李天亮网站怎么做构成
  • Word卡顿,过很久才弹窗网络连接失败解决办法
  • 古典网站建设睢宁招标网官方
  • 告别物流乱象:商贸物流软件如何实现全流程可视化管理​
  • Ubuntu 20.04 安装mysql-5.7.9
  • 二、排版格式与注释
  • 计组2.2.1——加法器,算数逻辑单元ALU
  • 东莞网站建设公司注册郑州企业网站排名
  • 2025-10-08 Python 标准库 4——内置类型:数字类型
  • java ArrayList的add方法是插入到最后吗
  • Kotlin 判空写法对比与最佳实践
  • 如何在中国建设银行网站转账网站域名格式
  • OSI 七层模型
  • HTTP Client
  • 网络彩票网站建设电商具体是做什么的上班
  • 【C语言基础详细版】02. 数组详解:从概念到应用全面解析
  • 告别项目文档滞后:Litho(deepwiki-rs)在CI/CD中的自动化文档生成实践
  • 接口测试-postman-全局变量与环境变量
  • 使用MockMVC进行Web请求验证
  • 淄博网站制作设计html5教程下载百度云
  • 专业网站建设怎么样网站建设的感想与建议
  • CMD命令行
  • MySQL————库的操作
  • Hugging face下载模型错误:401 Client Error: Unauthorized for url
  • 安装系统进阶专题(中)
  • 济南网站建设(力推聚搜网络)北京上地做网站
  • TortoiseSVN下载安装汉化教程(附安装包)
  • 泰安网站建设价格长治公司网站建设