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

标题: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 的命名规则知识点总结 在 Python 中,命名规则是非常重要的,它可以影响代码的可读性和可维护性。以下是 Python 的命名规则知识点总结。 1. 变量命名规则 在 Python 中,变量名应该使用小写字母,并使用下划线分隔单词。以下是一个变量命名规则的示例: first_name = ‘John’ last_name = ‘Doe’ 在上…

    python 2023年5月15日
    00
  • 如何将自己的python代码发布在pip install给别人使用你知道吗

    发布自己的 Python 代码到 PyPI 使其能够方便地被他人安装使用,包括以下几个步骤。 1. 创建项目 首先需要创建一个 Python 项目,项目的结构通常如下: myproject/ ├── myproject/ │ ├── __init__.py │ ├── module1.py │ └── module2.py ├── tests/ │ ├── …

    python 2023年5月14日
    00
  • python单线程实现多个定时器示例

    Python单线程实现多个定时器的示例主要分为两种方式:使用time库和使用sched库。 使用time库实现多个定时器 示例一: import time def func1(): print("func1 called") def func2(): print("func2 called") while True: …

    python 2023年5月19日
    00
  • Python中的函数参数传递问题

    那我们来详细讲解一下“Python中的函数参数传递问题”的攻略吧。首先,Python的函数参数传递可以分为两种情况,分别是值传递和引用传递。 值传递 当我们将一个变量作为参数传递给函数时,Python会在内存中复制这个变量的值,然后将这个值传递给函数。在函数中,对这个变量的修改不会影响到原始的变量。具体来说,我们看下面的代码示例: def my_func(x…

    python 2023年5月13日
    00
  • Python代码中引用已经写好的模块、方法的两种方式

    下面是Python代码中引用已经写好的模块、方法的两种方式的详细攻略。 1. import语句 import语句是在Python中用来引入其他模块或包中的对象。可以使用import语句引入整个模块或指定模块中的某一个或多个对象。import语句可以出现在脚本的任意位置,但通常在脚本的开头。 引入整个模块 假设我们已经编写了一个模块foo.py,其中包含一个名…

    python 2023年6月2日
    00
  • Python Matplotlib初阶使用入门教程

    下面是关于“Python Matplotlib初阶使用入门教程”的完整攻略: Python Matplotlib初阶使用入门教程 什么是Matplotlib Matplotlib是Python中最常用的数据可视化库之一。它可以构建各种类型的图表,例如折线图、散点图、柱状图等等。 安装Matplotlib 可以使用pip命令或者Anaconda进行安装,命令如…

    python 2023年5月19日
    00
  • Python学习开发之图形用户界面详解

    Python学习开发之图形用户界面详解攻略 1. 概述 Python一直以来都是一门很流行的编程语言,它被广泛应用于Web开发、数据处理、人工智能等领域。而在GUI方面,Python也有着不错的表现,像Tkinter、wxPython和PyQt等就是很流行的GUI库。本篇攻略主要讲解Python GUI方面的知识。 2. GUI库介绍 2.1 Tkinter…

    python 2023年5月30日
    00
  • python正则表达式查找和替换内容的实例详解

    Python正则表达式查找和替换内容的实例详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python中,我们可以使用re模块来操作正则表达式。本攻略将详细讲解Python正则表达式中查找和替换内容实例,包括re模块中的findall()、search()、sub()等函数的用法,以及常用的正则表达式语…

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