SeleniumBase在无头模式下绕过验证码的完整指南

爬虫代理

概述

在现代Web爬虫技术中,SeleniumBase 是一款强大的自动化测试工具,能够模拟用户行为,进行高效的数据采集。然而,验证码(CAPTCHA)常常成为爬虫项目中的一个难题,尤其是在无头模式(Headless Mode)下,验证码绕过变得更加复杂。

本篇文章将详细讲解如何在SeleniumBase的无头模式下绕过验证码,使用代理IP(以爬虫代理为例)并通过设置User-AgentCookie等手段,提升爬虫的效率和成功率。

1. 无头模式下验证码绕过的挑战

无头模式指的是浏览器在后台运行,没有图形化界面的展示。这种模式下爬虫可以更高效地运行,减少系统资源的消耗。但是,许多网站使用验证码来阻止自动化程序的访问,尤其是无头浏览器更容易被识别为“机器人行为”。

验证码绕过的挑战源自于网站对自动化行为的检测,这些检测基于浏览器的指纹信息、IP地址的频繁请求,以及缺少用户行为的模拟。因此,使用代理IP设置User-AgentCookie 等方法可以帮助我们模拟正常用户行为,并提高验证码的通过率。

2. 绕过验证码的策略

2.1 无头模式浏览器设置

使用SeleniumBase时,可以通过设置浏览器选项进入无头模式。以下是如何启用无头模式并修改浏览器的配置,以减少被检测为自动化请求的可能性。

from seleniumbase import BaseCase
from selenium.webdriver.chrome.options import Optionsclass BypassCaptchaTest(BaseCase):def setUp(self):super().setUp()options = Options()options.add_argument('--headless')  # 开启无头模式options.add_argument('--disable-gpu')options.add_argument('--no-sandbox')options.add_argument('--disable-blink-features=AutomationControlled')  # 禁用自动化检测# 设置User-Agent,模拟正常用户options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36')self.driver = self.get_new_driver(options=options)def tearDown(self):self.driver.quit()  # 关闭浏览器并清理资源

2.2 使用代理IP

通过使用代理IP可以隐藏爬虫的真实IP地址,避免因频繁访问而被目标网站屏蔽。这里以爬虫代理为例,展示如何配置代理IP。

代理IP的配置如下:

  • 域名:proxy_domain
  • 端口:proxy_port
  • 用户名:username
  • 密码:password

在SeleniumBase中配置代理IP的代码如下:

# 在options中设置代理IP 亿牛云爬虫代理 www.16yun.cn
options.add_argument('--proxy-server=http://username:password@proxy_domain:proxy_port')

通过代理IP的轮换,我们可以有效规避网站对IP地址的限制,提高爬虫的持久性。

2.3 设置User-Agent和Cookie

User-Agent 是浏览器向服务器发送的请求中携带的客户端信息,通常包括操作系统、浏览器版本等,通过修改User-Agent可以模仿各种设备和浏览器。与此同时,Cookie 可用于保持登录状态和会话的连续性,减少验证码的频繁触发。

代码示例:

# 设置User-Agent
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36')# 设置Cookie,保持登录状态
self.driver.add_cookie({'name': 'session_id', 'value': 'session_value'})

这些配置能够有效降低验证码的触发概率,提升爬虫的效率。

3. 代码示例:访问大众点评网站并绕过验证码

以下是一个完整的代码示例,目标网站设置为大众点评,并结合了无头模式、代理IP、User-Agent和Cookie的配置,模拟用户搜索操作,进行数据抓取。

from seleniumbase import BaseCase
from selenium.webdriver.chrome.options import Optionsclass BypassCaptchaWithProxy(BaseCase):def setUp(self):super().setUp()options = Options()options.add_argument('--headless')  # 无头模式options.add_argument('--disable-gpu')options.add_argument('--no-sandbox')options.add_argument('--disable-blink-features=AutomationControlled')  # 禁用自动化检测标志# 设置User-Agent,模拟普通用户options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36')# 配置代理IP(亿牛云爬虫代理 www.16yun.cn)options.add_argument('--proxy-server=http://username:password@proxy_domain:proxy_port')self.driver = self.get_new_driver(options=options)def test_bypass_captcha(self):# 访问大众点评网站self.driver.get("https://www.dianping.com")# 设置Cookie(具体Cookie值可通过抓包工具获取)self.driver.add_cookie({'name': 'session_id', 'value': 'session_value'})# 模拟用户输入并点击搜索search_box = self.driver.find_element_by_id('J-search-input')  # 获取搜索框search_box.send_keys("餐厅")  # 输入搜索内容search_button = self.driver.find_element_by_class_name('search-btn')  # 获取搜索按钮search_button.click()  # 点击搜索# 检查页面是否加载成功,并绕过验证码assert "美食" in self.driver.page_source  # 验证页面是否包含"美食"字样def tearDown(self):self.driver.quit()  # 关闭浏览器

代码解析:

  1. 无头模式:通过 --headless 选项开启无头模式。
  2. 代理IP:使用了爬虫的代理服务来隐藏真实IP,并通过 --proxy-server 配置代理IP。
  3. User-Agent:通过 --user-agent 伪装成真实浏览器用户,减少被网站检测为爬虫的风险。
  4. Cookie:手动添加Cookie,保持会话和登录状态,避免频繁触发验证码。
  5. 模拟用户行为:在大众点评网站上,模拟了输入关键词“餐厅”并点击搜索按钮的操作。

4. 提高爬虫效率的技巧

为了进一步提升爬虫效率,除了上面提到的技术,还有以下几个实用技巧:

  • 代理池轮换:通过定期更换代理IP,可以有效避免IP封禁的风险。
  • 合适的延迟:在爬取多个页面时,适当设置请求之间的延迟,模拟真实用户的操作,避免被检测为机器人行为。
  • 分布式爬虫:通过分布式系统实现并发爬取,提高数据抓取的速度和效率。

结论

本文详细讲解了如何使用SeleniumBase在无头模式下绕过验证码,结合代理IP、User-Agent 和 Cookie 的配置,可以有效提高爬虫的成功率和效率。通过具体的代码示例展示了如何在实际场景中(如访问大众点评)应用这些技术,以便应对现代网站的反爬虫机制。

这些策略和代码为爬虫开发者提供了强有力的工具,帮助应对验证码和反爬虫机制带来的挑战。

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

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

相关文章

基于SpringBoot的国家基础信息管理功能的设计与实现

目录 前言 一、标准信息参考 1、信息来源 二、后台基础信息的维护管理 1、实体类和Mapper类 2、业务层和控制层设计 3、前端界面实现 三、管理页面效果 1、列表管理界面 2、国家信息调整 四、总结 前言 在之前的博客中,我们基于GeoTools工具实现了全球各个…

怡然自得英语怎么说,柯桥零基础英语培训

放松的;悠然自得的 例句: Everyone here has a really laid-back attitude. 这里的每个人都是一副优哉游哉的态度。 Visitors seeking deserted and unpolluted beaches and a laid-back atmosphere should go elsewhere. 而寻求静谧、清洁的海滩和…

软件测试面试200问(附30W字面试文档)

Part1 1、你的测试职业发展是什么? 测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自…

用gost建立私密的内网穿透网络

内网空透是一项非常有用的东西。 现有比较常见的是用FRP,但是FRP需要配置,文档还挺麻烦。 其实gost是一款功能强大的网络神器,可以轻松实现内网穿透。(内网代理) 本文介绍的是升级版内容,客户端也需要go…

过孔对信号质量的影响(方式、仿真、结论)

概述: 关于过孔的作用(信号孔、电源孔、地孔、机械定位孔、散热通风孔),本文主要叙述过孔在焊盘直径、过孔反焊盘直径、有无非功能焊盘、过孔残桩长度等方面对信号质量带来的影响。 一、 过孔影响信号质量的方式 过孔是PCB上的…

打造高效稳定的FastAPI接口:从统一输出到全局异常处理

引言 在现代应用开发中,API无疑是连接前后端的核心桥梁。无论是Web应用、移动App还是服务间的通信,API的性能和稳定性都直接影响用户体验。而随着Python 3的异步特性不断成熟,FastAPI这款轻量级的Web框架因其超高的性能和灵活性迅速走红。那么,如何用FastAPI构建一个高效稳…

深度学习论文: T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy

深度学习论文: T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy T-Rex2: Towards Generic Object Detection via Text-Visual Prompt Synergy PDF: https://arxiv.org/pdf/2403.14610 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch Py…

代码提交后服务器项目同步更新

一、简介 最近在服务器上部署了一个node后台项目,每次发布都需要更新一下服务器上的后台文件;这样来回操作有些许麻烦。为此想要服务器端后台项目连接代码仓库,监听代码仓库的更新情况;如果有更新则自动执行git pull同步最新代码…

网络编程(16)——asio多线程模型IOServicePool

目录 十六、day16 1. 什么是多线程? 2. IOServicePool实现 3. 服务器修改 4. 客户端修改 5. 总结 1. boost::asio::io_context::work的作用? 十六、day16 在之前的设计中,我们对 ASIO 的使用都是采用单线程模式。为了提升网络 I/O 并…

持续科技创新 高德亮相2024中国测绘地理信息科技年会

图为博览会期间, 自然资源部党组成员、副部长刘国洪前往高德企业展台参观。 10月15日,2024中国测绘地理信息科学技术年会暨中国测绘地理信息技术装备博览会在郑州召开。作为国内领先的地图厂商,高德地图凭借高精度高动态导航地图技术应用受邀参会。 本…

一文详解流处理、批处理和流批一体

一、流处理 定义:流处理是一种对实时流入的数据进行连续处理的方式,流式数据处理中的数据集是不固定和无边界的。 特点: 1.实时性:能够在数据产生的瞬间就对其进行处理,具有非常高的实时性。这使得企业可以及时响应…

光伏项目开发360°管控,规避潜在风险

光伏项目建设在国家的大力支持下如雨后春笋般涌现,投资者对回报率和项目质量的要求越来越高。在这样的背景下,光伏项目全生命周期管理愈发重要。 一、业主沟通开发 积极和业主进行沟通,了解其合作意愿。向业主科普安装光伏的好处&#xff0c…

[权威出版|稳定检索]2024年信息控制、电气与智慧交通国际会议(ICEIT 2024)

2024年信息控制、电气与智慧交通国际会议 2024 International Conference on Information Control, Electrical and Intelligent Transportation 【1】大会信息 会议名称:2024年信息控制、电气与智慧交通国际会议 会议简称:ICEIT 2024 大会时间&#x…

Open-WebUI

Open-WebUI特点⭐ ️直观的界面:聊天界面从 ChatGPT 中汲取灵感,确保用户友好的体验。响应式设计:在桌面和移动设备上享受无缝体验。⚡快速响应:享受快速响应的性能。轻松设置:使用 Docker 或 Kubernetes(…

101、QT摄像头录制视频问题

视频和音频录制类QMediaRecorder QMediaRecorder 通过摄像头和音频输入设备进行录像。 注意: 使用Qt多媒体模块的摄像头相关类无法在Windows平台上进行视频录制,只能进行静态图片抓取但是在Linux平台上可以实现静态图片抓取和视频录制。 Qt多媒体模块的功能实现是依…

msql事务隔离级别 线上问题

1. 对应代码 解决方式: 在事务隔离级别为可重复读(RR)时,数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下,事务在执行期间看到的数据是事务开始时的数据快照,即使其他事务对数据进行了修改&am…

实战篇:(六)创建属于自己的 Vue 3 组件库:主题切换与样式管理

创建属于自己的 Vue 3 组件库:主题切换与样式管理 构建一个主题化的 Vue 3 组件库需要多个步骤,包括项目的初始化、组件的创建、主题的实现和样式的管理。以下是详细的步骤和实现代码。 1. 初始化项目 使用 Vite 创建 Vue 3 项目: npm cre…

Java基础14-网络编程

十四、网络编程 java.net.*包下提供了网络编程的解决方案! 基本的通信架构 基本的通信架构有2种形式: CS架构( Client客户端/Server服务端)、BS架构(Browser浏 览器/Server服务端)。无论是CS架构,还是BS架构的软件都必须依赖网络编程!。 1、网络通信的三要素 网络通…

堡垒机安装、链接服务器、数据库

堡垒机 JumpServer - 开源堡垒机 - 官网 下载安装包 jumpserver jumpserver.org (.org开源) 1、将安装包上传至虚拟机 (1)rz上传 (2)lftp登录 put下载 2、解压 [roothostname ~]# tar -xf jumpserver-ce-v4.2.0-x86_64.t…

认识Java的异常

异常机制 异常机制指的是程序出现错误时,程序的处理方式。 程序的错误分为三种: 编译错误:由于没有遵循对于语言的语法规则,编辑器可以自动发现并提示的错误位置和原因。逻辑错误:程序没有按照预期的顺序执行。运行…