selenium处理滑块验证码(最简单的滑块)

该Python脚本利用Selenium库中的ActionChains方法,进入特定网页,切换到iframe框架内,找到滑块验证元素,并执行拖动操作以完成验证。代码中定义了函数slider()来处理滑块验证过程。
摘要由CSDN通过智能技术生成

解决上面的滑块验证,这种只要用鼠标点击并移动指定距离就可以完成验证(x轴)

实现

"""
@Time : 2023/4/20 15:59
@Author : Wenny
@File :start.py

"""
import json
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.chrome.options import Options
from pub_function import PubMysql
connect = PubMysql()


def br():
    chrome_options = Options()
    # chrome_options.add_argument("--headless")
    browser = webdriver.Chrome(options=chrome_options)
    browser.get('https://ebid.espic.com.cn/newgdtcms//category/purchaseListNew.html?dates=300&categoryId=2&tenderMethod=00&tabName=%E9%87%87%E8%B4%AD%E4%BF%A1%E6%81%AF&page=1')
    # browser.maximize_window()
    browser.set_page_load_timeout(15)
    browser.set_script_timeout(15)
    time.sleep(1)
    slider(browser)
    time.sleep(1)
    browser.quit()

def slider(browser):
    #切入iframe里面
    iframe_xpath='//*[@id="iframe"]'
    browser.switch_to.frame(browser.find_element_by_xpath(iframe_xpath))
    actionChains = ActionChains(browser)
    # 捕捉滑块元素 //div[@class="btn"]
    slide_btn = browser.find_element_by_xpath('//div[@class="btn"]')
    # 观察网站滑块移动的长度和位置
    actionChains.drag_and_drop_by_offset(slide_btn, 338, 0).perform()
    time.sleep(5)
    print(browser.page_source)

if __name__ == '__main__':
    br()

结果:

 

 

滑块验证码是一种通过用户鼠标移动滑块来填补有缺口图片的验证码。它的原理是首先生成一张带有缺口的图片,然后在页面上展示给用户。用户需要通过鼠标移动滑块,将滑块拖动到正确的位置,以填补缺口。通过JavaScript获取用户滑动距离和坐标等信息,并将这些信息发送给后台进行校验。只要用户的滑动距离和轨迹行为符合要求,即可视为验证通过。 在使用selenium处理滑块验证码时,可以利用selenium的方法对元素进行截图来获取验证码的图片。首先,找到包含滑块的HTML元素,然后使用selenium分别对完整图片和有缺口的图片进行截图。以下是获取完整图片和有缺口图片的示例代码: 获取完整图片: ''' def get_full_image(driver): """鼠标移动到滑块,显示完整图案 :param driver: webdriver :return: 返回验证码背景图片Image对象 """ webdriver.ActionChains(driver).move_to_element(slider).perform() time.sleep(0.2) img = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div/div/a') if 'show' in img.get_attribute('class'): res = img.screenshot_as_png return Image.open(BytesIO(res)) else: raise ValueError('获取验证码背景图片失败') ''' 获取有缺口的图片: ''' def get_cut_image(driver): """点击滑动按钮获取有缺口图片 :param driver: webdriver :return: 返回验证码有缺口图片的Image对象 """ slider = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div') webdriver.ActionChains(driver).click_and_hold(slider).perform() time.sleep(0.1) img = driver.find_element_by_xpath('//*[@id="captcha"]/div/div/div/div/a') res = img.screenshot_as_png cut_img = Image.open(BytesIO(res)) return Image.open(BytesIO(res)) ''' 以上代码可以通过selenium的ActionChains类模拟鼠标的移动和点击操作,分别获取到完整图片和有缺口的图片。 通过这些方法可以帮助你在处理selenium中的滑块验证码时获取到所需的图片,从而进行后续的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值