Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

yizhihongxing

标题:Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)

介绍:本文将介绍使用Python和Selenium库破解GEETEST滑块验证码的方法。通过模拟人类滑动的方式,实现95%以上的高通过率。

步骤:
一、准备工作
1. 安装Python3;
2. 安装Selenium库和Chrome浏览器驱动;
3. 安装Pillow库和NumPy库。

二、获取验证码图片
1. 打开GEETEST滑块验证码页面;
2. 使用Selenium获取网页源代码;
3. 提取验证码图片的url;
4. 通过urllib库下载验证码图片。

示例代码:

from selenium import webdriver
import urllib.request

# 打开Chrome浏览器
driver = webdriver.Chrome()

# 跳转到目标网页
driver.get("https://www.xxxxx.com")

# 获取网页源代码
html = driver.page_source

# 假设验证码图片url为https://www.xxxxx.com/code.jpg
url = "https://www.xxxxx.com/code.jpg"

# 下载验证码图片
urllib.request.urlretrieve(url, "code.jpg")

三、通过Pillow库处理验证码图片
1. 使用Pillow库打开下载的验证码图片;
2. 将验证码图片转换为灰度图;
3. 对灰度图进行二值化处理,将图片像素值小于指定阈值的像素点变成黑色,其他像素点变成白色。

示例代码:

from PIL import Image
import numpy as np

# 打开验证码图片
img = Image.open("code.jpg")

# 将图片转换为灰度图
gray_img = img.convert('L')

# 对灰度图进行二值化处理
threshold = 100
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
binary_img = gray_img.point(table, '1')

四、分析滑块位置和滑块图片
1. 找到滑块的位置和大小;
2. 获取滑块图片;
3. 计算缺口在图片中的位置。

示例代码:

# 找到滑块的位置和大小
slide_btn = driver.find_element_by_xpath("//div[@class='gt_slider_knob gt_show']")
slide_btn_left = slide_btn.location['x']
slide_btn_top = slide_btn.location['y']
slide_btn_width = slide_btn.size['width']
slide_btn_height = slide_btn.size['height']

# 获取滑块图片
slide_img = binary_img.crop((slide_btn_left, slide_btn_top, slide_btn_left + slide_btn_width, slide_btn_top + slide_btn_height))

# 计算缺口在图片中的位置
for i in range(10, slide_btn_width):
    for j in range(slide_btn_height):
        if not slide_img.getpixel((i, j)):
            slide_distance = i
            break

五、模拟滑动操作
1. 找到滑块需要移动的目标位置;
2. 计算移动的距离;
3. 实现模拟滑动操作。

示例代码:

from selenium.webdriver.common.action_chains import ActionChains

# 找到滑块需要移动的目标位置
slide_bg = driver.find_elements_by_xpath("//div[@class='gt_slider_knob gt_off']")[0]
slide_bg_left = slide_bg.location['x']
slide_bg_top = slide_bg.location['y']
slide_bg_width = slide_bg.size['width']
slide_bg_height = slide_bg.size['height']

# 计算移动的距离
slide_distance = slide_distance / slide_btn_width * slide_bg_width

# 实现模拟滑动操作
ActionChains(driver).click_and_hold(slide_btn).perform()

for i in range(int(slide_distance)):
    ActionChains(driver).move_by_offset(1, 0).perform()

ActionChains(driver).pause(0.5).release(slide_btn).perform()

六、完整代码

from selenium import webdriver
import urllib.request
from PIL import Image
import numpy as np
from selenium.webdriver.common.action_chains import ActionChains

# 打开Chrome浏览器
driver = webdriver.Chrome()

# 跳转到目标网页
driver.get("https://www.xxxxx.com")

# 获取网页源代码
html = driver.page_source

# 假设验证码图片url为https://www.xxxxx.com/code.jpg
url = "https://www.xxxxx.com/code.jpg"

# 下载验证码图片
urllib.request.urlretrieve(url, "code.jpg")

# 打开验证码图片
img = Image.open("code.jpg")

# 将图片转换为灰度图
gray_img = img.convert('L')

# 对灰度图进行二值化处理
threshold = 100
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
binary_img = gray_img.point(table, '1')

# 找到滑块的位置和大小
slide_btn = driver.find_element_by_xpath("//div[@class='gt_slider_knob gt_show']")
slide_btn_left = slide_btn.location['x']
slide_btn_top = slide_btn.location['y']
slide_btn_width = slide_btn.size['width']
slide_btn_height = slide_btn.size['height']

# 获取滑块图片
slide_img = binary_img.crop((slide_btn_left, slide_btn_top, slide_btn_left + slide_btn_width, slide_btn_top + slide_btn_height))

# 计算缺口在图片中的位置
for i in range(10, slide_btn_width):
    for j in range(slide_btn_height):
        if not slide_img.getpixel((i, j)):
            slide_distance = i
            break

# 找到滑块需要移动的目标位置
slide_bg = driver.find_elements_by_xpath("//div[@class='gt_slider_knob gt_off']")[0]
slide_bg_left = slide_bg.location['x']
slide_bg_top = slide_bg.location['y']
slide_bg_width = slide_bg.size['width']
slide_bg_height = slide_bg.size['height']

# 计算移动的距离
slide_distance = slide_distance / slide_btn_width * slide_bg_width

# 实现模拟滑动操作
ActionChains(driver).click_and_hold(slide_btn).perform()

for i in range(int(slide_distance)):
    ActionChains(driver).move_by_offset(1, 0).perform()

ActionChains(driver).pause(0.5).release(slide_btn).perform()

七、总结
本文介绍了如何使用Python和Selenium库破解GEETEST滑块验证码。通过模拟人类滑动的方式,实现了高通过率。读者可以按照步骤自行实现代码,并根据实际情况对代码进行调整。如果您有任何问题,欢迎在评论区留言,我将尽快回复。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率) - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python实现自动发送邮件

    下面是“Python实现自动发送邮件”的完整攻略。 一、准备工作 1. 获取邮箱账号信息 首先需要获取自己邮箱的账号信息,包括: 邮箱地址 授权码/密码(注意不是邮箱登录密码) 2. 安装Python第三方库 pip install requests pip install bs4 pip install lxml 二、编写Python脚本 1. 发送纯文本…

    python 2023年5月19日
    00
  • Python简单生成随机姓名的方法示例

    下面就来详细讲解一下如何用Python生成随机姓名的方法。 生成姓氏 首先我们需要生成姓氏,通常我们可以使用已有的姓氏列表,很多基础库都可以提供这种列表。这里我们使用Python内置的random库来实现: import random # 姓氏列表 family_name_list = [‘赵’, ‘钱’, ‘孙’, ‘李’, ‘周’, ‘吴’, ‘郑’, …

    python 2023年5月20日
    00
  • 详解Python手写数字识别模型的构建与使用

    详解Python手写数字识别模型的构建与使用 简介 本攻略将详细讲解如何使用Python构建一个手写数字识别模型,该模型可以识别0-9这10个数字。通过本攻略的学习,您将了解到以下知识点: Python基础语法知识 机器学习的基础理论和相关算法 如何使用Python编写一个机器学习模型 如何使用Python实现手写数字图片的预处理和特征提取 通过以下两条示例…

    python 2023年6月3日
    00
  • Python 如何限制输出日志的大小

    限制Python输出日志的大小,是通过设置日志记录器的处理器来实现的。可以通过Python内置的logging模块来实现这个目标。具体步骤如下: 1. 创建日志记录器 使用logging.getLogger()方法创建一个记录器对象。可以为这个记录器对象设置名称,方便后续调用和管理。 import logging logger = logging.getLo…

    python 2023年6月5日
    00
  • python通过pip更新所有已安装的包实现方法

    如果要更新所有已安装的Python包,可以通过pip工具实现。具体步骤如下: 打开终端或命令行窗口。 输入以下命令来升级pip本身: python -m pip install –upgrade pip 输入以下命令来列出所有已安装的包及其当前版本: pip list 输入以下命令来一次性更新已安装的所有包到最新版本: pip freeze | xargs…

    python 2023年5月14日
    00
  • 4种方法教你利用Python发现数据的规律

    4种方法教你利用Python发现数据的规律 在数据分析和机器学习领域,发现数据的规律是非常重要的。Python作为一种流行的编程语言,提供了多种方法来发现数据规律。本文将介绍4种方法,包括可视化、统计分析、机器学习和深度学习。 可视化 可视化是一种非常直观的方法,可以帮助我们发现数据的规律。Python提供了多种可视化库,包括matplotlib、seabo…

    python 2023年5月13日
    00
  • python 实现 redis 数据库的操作

    要在Python程序中操作Redis数据库,必须使用Redis的Python客户端库。目前最流行的Redis Python客户端库是redis-py,它提供了完整的Redis命令封装,并支持连接池、高级数据类型等功能。 以下是操作Redis数据库的完整攻略: 1. 安装redis-py redis-py可以通过pip安装: pip install redis…

    python 2023年5月13日
    00
  • python之基数排序的实现

    Python实现基数排序算法 基数排序算法是一种非比较排序算法,它的基本思是将待排序的元素按照位数切割成不同的数字,然后按每个位数分别进行排序。具体步骤如下: 找出待排序数组中最大的数字,并确定其位数。 从最低位开始,按照每个位数进行排序。具体做法是,将待排序数组中的数字按照当前位数的值进行分组,然后按照每个组的顺序重新排列数组。 重复上述操作,直到将所有的…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部