python反爬-图像验证码与滑块验证码的跳过反selenium检测,动态ip等问题

针对反爬措施,Python可以使用以下策略来跳过图像验证码与滑块验证码、反检测Selenium,以及通过动态IP规避限制。这是一个分步说明:

1. 图像验证码的跳过与破解
1.1 图像验证码处理
对于简单的图像验证码,可以使用 OCR 技术直接识别验证码内容。常用库包括:
Tesseract-OCR: 一款开源 OCR 工具。
Pytesseract: Tesseract 的 Python 封装。
实现示例

from PIL import Image
import pytesseract

# 加载验证码图片
image = Image.open("captcha.jpg")

# OCR 识别验证码
captcha_text = pytesseract.image_to_string(image)
print("识别的验证码是:", captcha_text)

注意
如果验证码经过干扰(如噪声或扭曲),可以先通过 OpenCV 进行图像预处理,例如二值化、去噪等。

import cv2

# 加载图片
image = cv2.imread("captcha.jpg", 0)

# 二值化处理
_, thresh_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)

# 保存处理后的图像
cv2.imwrite("processed_captcha.jpg", thresh_image)

1.2 滑块验证码处理
对于滑块验证码,一般需要模拟拖动行为。常用工具:
Selenium:用于操作网页。
OpenCV:识别滑块和背景的缺口位置。
核心思路
使用 Selenium 加载滑块验证码页面。
使用 OpenCV 检测背景缺口位置。
模拟拖动滑块的行为。
实现示例

from selenium import webdriver
import time
import cv2
import numpy as np
from selenium.webdriver.common.action_chains import ActionChains

# 加载页面
driver = webdriver.Chrome()
driver.get("https://example.com/captcha")

# 截取滑块背景图
background = driver.find_element("id", "background-image")
background.screenshot("background.png")

# 截取滑块图
slider = driver.find_element("id", "slider-image")
slider.screenshot("slider.png")

# 使用 OpenCV 计算滑块缺口位置
def calculate_offset(bg_path, slider_path):
    bg_img = cv2.imread(bg_path, 0)
    slider_img = cv2.imread(slider_path, 0)
    res = cv2.matchTemplate(bg_img, slider_img, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    return max_loc[0]  # 返回缺口的 x 坐标

offset = calculate_offset("background.png", "slider.png")
print("缺口位置:", offset)

# 模拟拖动滑块
slider = driver.find_element("id", "slider-handle")
action = ActionChains(driver)
action.click_and_hold(slider).perform()
action.move_by_offset(xoffset=offset, yoffset=0).perform()
time.sleep(0.5)
action.release().perform()

2. 反 Selenium 检测
2.1 修改 WebDriver 属性
很多网站通过检查 navigator.webdriver 或 WebDriver 指纹来识别 Selenium,解决方案如下:
修改 WebDriver 属性

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")

driver = webdriver.Chrome(options=options)

# 修改 navigator.webdriver 属性
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
    """
})
driver.get("https://example.com")

2.2 隐藏 Selenium 指纹
使用 undetected-chromedriver 库自动隐藏 Selenium 的常见指纹。
安装

pip install undetected-chromedriver

示例代码

import undetected_chromedriver.v2 as uc

driver = uc.Chrome()
driver.get("https://example.com")

3. 动态 IP 切换
3.1 使用代理 IP
通过代理服务器动态切换 IP,常见的代理服务包括免费代理、爬虫代理池或购买代理服务。
示例代码

from selenium import webdriver

proxy = "http://username:password@proxyserver:port"  # 替换为你的代理信息
options = webdriver.ChromeOptions()
options.add_argument(f"--proxy-server={proxy}")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")

3.2 搭建代理池
使用 requests 配合代理池实现动态 IP 切换。可以使用开源代理池项目如 IPProxyPool自建代理池
示例代码

import requests

# 示例代理池
proxies = [
    "http://proxy1:port",
    "http://proxy2:port",
    "http://proxy3:port"
]

# 动态切换代理
for proxy in proxies:
    try:
        response = requests.get("https://example.com", proxies={"http": proxy, "https": proxy}, timeout=5)
        print(f"IP {proxy} 访问成功: {response.status_code}")
    except Exception as e:
        print(f"IP {proxy} 访问失败: {e}")

4. 综合反爬策略
模拟真实用户行为
随机设置鼠标移动轨迹和速度。
设置动态的 User-Agent
动态加载时间
添加 time.sleep 随机延迟,模拟真实的用户行为。
分布式爬取
将任务分发到多个代理 IP 或服务器,减少单 IP 压力。
日志监控
实时监控请求返回状态,动态调整代理或重试策略。

通过以上方法,可以有效处理反爬中常见的图像验证码、滑块验证码、动态 IP 和 Selenium 检测问题。在实践中需要根据目标网站的反爬策略灵活调整代码。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4896

Like (0)
Previous 2024年11月28日 下午7:42
Next 2024年11月28日 下午8:14

相关推荐

  • 在Python中的Numpy库下载与安装教程

    Python 的 Numpy 库下载与安装(超详细教程) NumPy 是 Python 中一个非常强大的科学计算库,特别适用于处理大规模的数组、矩阵计算以及执行高效的数学操作。无论是机器学习、数据分析还是科学计算,NumPy 都是基础工具之一。 下面是关于如何下载和安装 NumPy 的详细教程,包括在不同操作系统上的安装方法。 1. 确认环境与准备工作 在开…

    2024年11月25日
    00
  • 在使用 HBase 时,遇到 Unable to find region for 错误问题

    在使用 HBase 时,遇到 Unable to find region for 错误通常是由于以下几个原因引起的:HBase RegionServer 未启动或无法连接表的 Region 分布信息不一致Zookeeper 配置问题客户端连接配置问题HBase 版本不兼容下面是一些常见的原因和解决办法:1. 确保 HBase 服务正常运行首先检查你的 HBa…

    2024年11月29日
    00
  • JavaScript 前端开发:从入门到精通的方法

    JavaScript 是前端开发的核心语言,它与 HTML 和 CSS 一起构成了 Web 开发的基础。要从入门到精通 JavaScript 前端开发,需要系统化的学习方法和实践。以下是详细的方法和步骤。 1. 理解 JavaScript 的基础 1.1 学习基础语法 1.2 理解函数 箭头函数: 1.3 掌握 DOM 操作 修改内容: 监听事件: 1.4 …

    2024年11月22日
    00
  • C语言中的操作符(Operators)对数据进行运算的符号

    C语言中的操作符(Operators)是对数据进行运算的符号,分为多种类型,支持从基本算术到复杂的逻辑操作。以下是C语言操作符的详解: 1. 算术操作符(Arithmetic Operators) 用于执行基本数学运算: 示例: 2. 关系操作符(Relational Operators) 用于比较两个值,结果为布尔值: 示例: 3. 逻辑操作符(Logic…

    2024年11月22日
    00
  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • 在使用 PHP 抓取 HTTPS 资源时,会遇到一些常见问题

    在使用 PHP 抓取 HTTPS 资源时,可能会遇到一些常见问题。这些问题通常与 SSL 配置、证书验证或 PHP 设置相关。以下是常见问题及其解决方法的汇总: 1. SSL 证书验证失败问题描述当使用 file_get_contents、cURL 等方法访问 HTTPS 资源时,可能会遇到类似以下错误: 解决方法更新 cacert.pem 文件下载最新的根…

    2024年12月2日
    00
  • 微信小程序RequestTask.onChunkReceived 监听分块数据接收事件接口

    在微信小程序中,RequestTask.onChunkReceived 是用于监听分块数据接收事件的接口。此功能适用于需要逐步接收大数据(例如流媒体、文件分块等)的场景,可以显著提升大文件传输的性能和用户体验。 以下是详细介绍和使用方法: 1. 功能说明用途:监听通过 wx.request 或 wx.downloadFile 发起的请求过程中,每次接收到的数…

    2024年11月28日
    00
  • Python 的 json模块序列化数据从文件里读取出来或存入文件

    Python 的 json 模块用于处理 JSON 格式的数据,可以将 JSON 数据与 Python 数据结构之间相互转换。以下是具体用法,包括从文件读取 JSON 数据以及将数据写入文件: 1. 将 JSON 数据从文件中读取到 Python 数据结构 代码示例: 解析过程: 2. 将 Python 数据结构写入到文件中(序列化为 JSON) 代码示例:…

    2024年11月26日
    00
  • 锁策略和优化是并发编程 synchronized 的优化,JVM 与编译器的锁优化

    锁策略和优化是并发编程中的重要话题,特别是在 Java 中,synchronized 作为基本的内置锁机制,得到了多层次的优化。在 JVM 和编译器层面,也有多种优化策略以提升锁的性能。 1. 锁策略:不同场景下的锁机制选择 2. synchronized 的优化 2.1 早期问题 在 Java 1.5 之前,synchronized 的实现依赖重量级锁,直…

    2024年11月24日
    00
  • 博客网站的链接添加nofollow的好处

    在博客中为链接添加 nofollow 属性可以在以下几个方面带来好处: 1. 防止权重流失作用:为外部链接添加 nofollow 标签可以阻止搜索引擎将页面权重(PageRank)传递给目标页面,从而保留网站自身的 SEO 权重。适用场景:指向不可靠或低质量内容的链接。赞助商链接或付费推广链接。 2. 避免搜索引擎惩罚作用:搜索引擎(如 Google)要求对…

    2024年11月28日
    00
  • 不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)

    不同版本的 FFmpeg 在使用 videotoolbox 硬件编码时,压缩比差距较大的问题,通常与以下几个因素相关:1. FFmpeg 硬件编码支持的变化:FFmpeg 集成了多种硬件加速技术(例如在 macOS 上使用 videotoolbox),而随着版本的更新,FFmpeg 可能对硬件编码进行了修复、改进或修改,这些变化可能会导致不同版本之间的压缩效…

    2024年11月27日
    00
  • Python与Jupyter Notebook中的数据可视化实现

    数据可视化是分析和展示数据的重要手段,而 Python 与 Jupyter Notebook 是构建交互式数据可视化的重要工具组合。以下是如何在 Python 和 Jupyter Notebook 中实现数据可视化的详细介绍。 1. 常用数据可视化库Python 中有多个强大的可视化库,以下是几个常用的:1.1 Matplotlib特点:功能强大、灵活,但语…

    2024年11月26日
    00
  • 在使用 uni-app 开发小程序或移动端应用时 title image失效问题

    在使用 uni-app 开发小程序或移动端应用时,若发现 分享的标题(title) 和 图片(image) 配置无效,可能是由于配置错误、平台限制或代码逻辑问题。以下是排查和解决问题的详细指南: 1. 确保正确使用分享 API onShareAppMessage(自定义转发) 确保在 pages 的页面代码中正确使用了 onShareAppMessage 方…

    2024年11月25日
    00
  • 使用 Python 和 PyHive 连接 Hive 数据库需要安装相关依赖并配置好 Hive 服务

    使用 Python 和 PyHive 连接 Hive 数据库需要安装相关依赖并配置好 Hive 服务。以下是具体步骤:1. 安装依赖确保安装了以下库:PyHive:提供与 Hive 的交互。Thrift:支持 Hive 使用 Thrift 协议通信。Sasl:如果 Hive 使用 Kerberos 验证,需要安装此模块。Pyhive[Hive]:PyHive…

    2024年11月28日
    00
  • 在 VS Code 中配置 Python 开发环境确实很简单!

    在 VS Code 中配置 Python 开发环境确实很简单!以下是超简单的操作步骤,让你快速上手 Python 开发: 1. 安装 VS Code从 VS Code 官网 下载并安装适合你系统的版本(Windows、macOS 或 Linux)。 在 VS Code 中配置 Python 开发环境确实很简单!以下是超简单的操作步骤,让你快速上手 Pytho…

    2024年12月1日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信