标题: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技术站