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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文详细介绍了如何在SeleniumBase的无头模式下绕过验证码,通过使用代理IP(以爬虫代理为例)、设置User-Agent和Cookie等手段提升爬虫效率。文章首先分析了无头模式下面临的验证码挑战,然后提供了具体的策略和代码示例,包括浏览器设置、代理IP配置及模拟用户行为的方法。最后,通过一个访问大众点评网站并绕过验证码的完整代码示例,展示了如何在实际场景中应用这些技术,应对现代网站的反爬虫机制。此外,还提供了一些提高爬虫效率的实用技巧,如代理池轮换、设置合适延迟和分布式爬虫等。

爬虫代理.png

概述

在现代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 Options

class 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 Options

class 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 的配置,可以有效提高爬虫的成功率和效率。通过具体的代码示例展示了如何在实际场景中(如访问大众点评)应用这些技术,以便应对现代网站的反爬虫机制。

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

相关文章
|
3月前
|
前端开发 PHP
ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则
本文介绍了在ThinkPHP框架中使用验证码扩展库的方法,包括安装验证码扩展库、在页面中使用验证码、自定义验证码配置以及校验验证码的步骤和代码示例。
ThinkPHP 验证码扩展库的使用,以及多应用模式下,如何自定义验证码校验规则
|
安全
360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,但是极速模式可以显示?
360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,但是极速模式可以显示?
348 0
360极速浏览器以及360安全浏览器在兼容模式下验证码图片显示不来,但是极速模式可以显示?
|
7月前
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
428 0
|
4月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
2月前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
32 1
|
2月前
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
89 2
|
3月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
55 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
4月前
|
资源调度 JavaScript API
nest.js + sms 实现短信验证码登录
本文介绍了在Nest.js框架中集成短信验证码登录的实现方案,详细阐述了使用阿里云短信服务的配置流程、资质申请、短信模板设置,并提供了API调用示例和工程代码的运行步骤。
nest.js + sms 实现短信验证码登录
|
4月前
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
|
7月前
|
缓存 算法 NoSQL
短信验证码登录接口,如何防止恶意攻击
该文讨论了移动应用中常见的手机短信验证码登录(短验登录)的安全设计。后端通常需要提供获取短信验证码和手机短验登录两个API。为了增强机短验登录API的安全性,提出了几种无需依赖Redis等存储介质的方案:1)使用数字签名确保请求合法性;2)基于时间戳的验证,允许在一定时间范围内有效;3)应用TOTP算法生成动态码进行验证;4)利用JWTToken进行身份验证并设置有效期。文章强调了创新思考在解决安全问题中的重要性,并鼓励读者分享更多方案。
598 1