使用Python和OpenCV解决极验滑动验证码

准备工作
在开始之前,请确保你已经安装了Python编程环境以及OpenCV库。

了解极验滑动验证码
极验滑动验证码是一种常见的验证码形式,用户需要通过拖动滑块完成验证。我们将以极验官网提供的示例为基础进行演示。

实现步骤
1. 初始化
首先,我们需要导入必要的库,并初始化浏览器驱动。

python

from selenium import webdriver
import time
import cv2
import numpy as np

class CrackGeetest:
    def __init__(self):
        self.url = 'https://account.geetest.com/login'
        self.driver = webdriver.Chrome()
2. 模拟登录填写,打开滑块验证
在浏览器页面中输入账户和密码,并点击滑块验证按钮。

python

def login_and_verify(self):
    self.driver.get(self.url)
    # 输入账号和密码
    email_input = self.driver.find_element_by_id('email')
    email_input.send_keys('your_email@example.com')
    password_input = self.driver.find_element_by_id('password')
    password_input.send_keys('your_password')
    # 点击滑块验证按钮
    verify_button = self.driver.find_element_by_class_name('geetest_radar_tip')
    verify_button.click()
3. 获取并储存有无缺口的两张图片
获取无缺口的验证图片并保存到本地,然后点击滑块,获取有缺口的验证图片并保存。

python

def capture_screenshots(self):
    # 截取第一张图片
    screenshot1 = self.driver.get_screenshot_as_png()
    img1 = cv2.imdecode(np.frombuffer(screenshot1, np.uint8), cv2.IMREAD_COLOR)
    cv2.imwrite('captcha1.png', img1)
    # 点击滑块
    verify_button = self.driver.find_element_by_class_name('geetest_slider_button')
    verify_button.click()
    time.sleep(1)
    # 截取第二张图片
    screenshot2 = self.driver.get_screenshot_as_png()
    img2 = cv2.imdecode(np.frombuffer(screenshot2, np.uint8), cv2.IMREAD_COLOR)
    cv2.imwrite('captcha2.png', img2)
4. 获取缺口位置
使用图像处理技术对比两张图片,得到缺口位置。

python

def get_gap_position(self, img1, img2):
    # 使用OpenCV对比两张图片,获取缺口位置
    # 返回缺口位置
5. 获取移动轨迹
根据缺口位置获取滑块的移动轨迹。

python

def get_track(self, gap_position):
    # 根据缺口位置获取滑块移动轨迹
    # 返回轨迹数组
6. 按照轨迹拖动,完成验证
根据移动轨迹拖动滑块完成验证。

python

def drag_slider(self, track):
    # 拖动滑块
    # 使用OpenCV移动滑块
7. 完成登录
如果验证成功,则执行登录操作。

python

def login(self):
    login_button = self.driver.find_element_by_class_name('login-btn')
    login_button.click()
    # 等待登录成功
    time.sleep(10)
    print('登录成功')

更多内容联系1436423940

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Python使用Webdriver进行滑动操作,首先需要导入相应的库和模块,如selenium.webdriver、selenium.webdriver.support.ui、selenium.webdriver.support和selenium.webdriver.support.expected_conditions。 在具体的代码中,需要先实例化一个WebDriver对象,并设置浏览器的最大化和等待时间。然后可以使用WebDriver的方法来实现登录操作。在这个过程中,需要获取滑动滑块的元素,并获取滑块的宽度作为滑动距离。可以通过调用get_tracks函数来生成滑动轨迹。接下来,获取滑块的点击按钮,并调用move_to_gap函数来进行滑动操作。 在move_to_gap函数中,首先模拟点击滑块,并使用ActionChains类来执行鼠标操作。然后通过循环遍历滑动轨迹中的偏移量,使用move_by_offset方法来模拟滑动的过程。最后释放鼠标并执行滑动操作。 请注意,具体的代码实现可能会因为不同的网页结构和滑块样式而有所差异,所以需要根据具体情况进行适当的调整。 示例代码: ```python from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver import ActionChains from selenium.webdriver.support import expected_conditions as EC class seleniumLogin(): def __init__(self, timeout=20): self.timeout = timeout self.browser = webdriver.Chrome() self.browser.maximize_window() self.wait = WebDriverWait(self.browser, self.timeout) def login(self): # ....其他代码.... # 获取滑动滑块 slide = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div#nc_1__scale_text > span.nc-lang-cnt'))) # 获取滑块滑动距离 distance = slide.size['width'] # 生成滑动轨迹 tracks = self.get_tracks(self, distance): # 获取滑块点击按钮 slide_button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span#nc_1_n1z'))) # 滑动滑块进行验证 self.move_to_gap(slide_button, tracks) def move_to_gap(self, slider, tracks): """拖动滑块 :param slider: 滑块 :param tracks: 轨迹 :return: """ # 模拟滑动滑块 action = ActionChains(self.browser) action.click_and_hold(slider).perform() for i in tracks: action.move_by_offset(xoffset=i, yoffset=0).perform() time.sleep(0.5) action.release().perform() ``` 请注意,以上代码仅为示例,具体的实现可能需要根据网页的具体情况进行适当调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python模拟滑动滑块验证](https://blog.csdn.net/guanmaoning/article/details/106294436)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [python实现滑动验证](https://blog.csdn.net/liulanba/article/details/115296586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值