Selenium解决滑块验证问题:自动化与技巧

这篇具有很好参考价值的文章主要介绍了Selenium解决滑块验证问题:自动化与技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

滑块验证是一种常见的人机验证机制,用于识别和防止自动化程序的访问。在爬虫和自动化测试中,我们经常面临需要处理滑块验证的情况。本文将介绍如何使用 Selenium 库处理滑块验证问题。

一、安装 Selenium
首先,确保你已经安装了 Selenium。你可以使用以下命令通过 pip 安装:

pip install selenium

同时,你还需要下载浏览器驱动程序。这里以 Chrome 浏览器为例,你可以在 ChromeDriver 官网 下载对应版本的 ChromeDriver。
Selenium解决滑块验证问题:自动化与技巧

二、滑块验证的工作原理

滑块验证通常涉及以下步骤:

1.用户访问目标网页。
2.网页显示一个滑块和目标区域。
3.用户需要拖动滑块到目标区域。
4.如果滑块成功到达目标区域,用户通常会被重定向到另一个页面或获得访问权限。
5.Selenium与滑块验证
6.Selenium是一个流行的网页自动化工具,它可以模拟真实用户的浏览器行为。然而,滑块验证机制的设计就是为了防止自动化工具的操作。因此,直接使用Selenium尝试拖动滑块通常会失败。

三、解决方法
为了解决这个问题,我们需要采取一些额外的步骤或技巧:

1.识别和定位滑块

首先,你需要定位滑块元素。这通常涉及使用XPath或其他定位方法来识别滑块元素。一旦你找到了滑块元素,你可以使用Selenium的click()或mouse_down()和mouse_up()方法来模拟拖动操作。

2.模拟拖动操作

模拟拖动操作时,你需要首先点击滑块,然后按住鼠标不放,同时移动到目标位置,最后松开鼠标。这可以通过以下代码实现:

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.common.action_chains import ActionChains  
  
driver = webdriver.Chrome()  # 使用你的浏览器驱动程序  
driver.get("your_website_url")  # 访问目标网页  

3.定位滑块并模拟拖动操作

slider = driver.find_element_by_xpath("slider_xpath")  # 使用适当的XPath定位滑块  
action = ActionChains(driver)  
action.click_and_hold(slider).perform()  # 点击并拖动滑块开始位置  
action.move_by_offset(offset_x, offset_y).perform()  # 移动到目标位置,需要计算偏移量  
action.release().perform()  # 松开鼠标,完成拖动操作

4.处理动态加载内容

某些滑块验证机制可能需要先加载一些动态内容,然后才能进行拖动操作。在这种情况下,你可能需要使用Selenium的等待机制(如WebDriverWait)来确保内容完全加载。

5.异常处理和重试机制

由于各种原因(如网络延迟、服务器响应慢等),拖动操作可能会失败。因此,实施一个异常处理和重试机制是很有必要的。这样,如果第一次尝试失败,程序可以自动重试几次。

6.使用浏览器自动化工具库(如Puppeteer)

有时,直接使用Selenium可能不是最佳选择。在这种情况下,你可以考虑使用其他浏览器自动化工具库,如Google的Puppeteer。Puppeteer为Node.js提供了一个高级API,可以更轻松地处理滑块验证等问题。

7.一个解决滑块问题的完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time
import base64
import cv2

def identify_gap(bg, tp, out):
    '''
    bg: 背景图片
    tp: 缺口图片
    out:输出图片
    '''
    # 读取背景图片和缺口图片
    bg_img = cv2.imread(bg)  # 背景图片
    tp_img = cv2.imread(tp)  # 缺口图片
    # 识别图片边缘
    bg_edge = cv2.Canny(bg_img, 100, 200)
    tp_edge = cv2.Canny(tp_img, 100, 200)
    # 转换图片格式
    bg_pic = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(tp_edge, cv2.COLOR_GRAY2RGB)
    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配
    # 绘制方框
    th, tw = tp_pic.shape[:2]
    tl = max_loc  # 左上角点的坐标
    br = (tl[0] + tw, tl[1] + th)  # 右下角点的坐标
    cv2.rectangle(bg_img, tl, br, (0, 0, 255), 2)  # 绘制矩形
    cv2.imwrite(out, bg_img)  # 保存在本地
    print(tl[0])
    # 返回缺口的X坐标
    return tl[0]

# 启动浏览器
driver = webdriver.Chrome()

# 打开网页
driver.get("https://netc1.igtb.bankofchina.com/#/login-page")
driver.maximize_window()
time.sleep(5)
# 定位滑块元素
slider = driver.find_element(By.XPATH,'/html/body/div[1]/div/div[2]/div/div/form/div[5]/div/div/div/div/div[2]/div[2]/div[2]/div[1]')  # 替换为实际的滑块元素的ID

image_url = driver.find_element(By.CSS_SELECTOR, '#dx_captcha_basic_sub-slider_2 > img').get_attribute("src")
print(image_url)
img_element = driver.find_element(By.CSS_SELECTOR, '#dx_captcha_basic_sub-slider_2 > img')
parent_element = driver.find_element(By.CSS_SELECTOR,'#dx_captcha_basic_sub-slider_2')
original_style = img_element.get_attribute('style')

image_selector = "#dx_captcha_basic_sub-slider_2 > img"
# 使用 JavaScript 修改图片元素的样式,将其显示出来
show_image_script = f'''
    var img = document.querySelector("{image_selector}");
    img.style.position = "absolute";
    img.style.left = "10px";  // 替换为你想要的横坐标
    img.style.top = "10px";    // 替换为你想要的纵坐标
    document.body.appendChild(img);  // 将图片移动到 body 元素下

'''
driver.execute_script(show_image_script)
driver.save_screenshot("D:/quanping.png")
time.sleep(5)
driver.execute_script(f'arguments[0].style = "{original_style}";', img_element)
driver.execute_script("arguments[1].appendChild(arguments[0]);", img_element, parent_element)

time.sleep(2)
try:
    # 执行 JavaScript 脚本,获取 Canvas 中的图片数据

    canvas_image_data = driver.execute_script("""
        var canvas = document.getElementsByTagName('canvas')[0];
        // 将 Canvas 导出为图像数据
        var imageData = canvas.toDataURL("image/png");

        // 返回图像数据
        return imageData;
    """,)

    # 解码图像数据
    image_data = base64.b64decode(canvas_image_data.split(",")[1])
    # 将图像数据保存到文件
    with open("huakuai/bj.png", "wb") as image_file:
        image_file.write(image_data)


except Exception as e:
    print(f"An error occurred: {str(e)}")

im = cv2.imread('D:/quanping.png')
im = im[12:58,12:58]
cv2.imwrite('huakuai/quekuai.png',im)
a=identify_gap("huakuai/bj.png","huakuai/quekuai.png","huakuai/out.png")

action = ActionChains(driver)
# action.click_and_hold(slider).move_by_offset(a, 0).release().perform()
i=0
print(a)
action.speed = 0.5
action.click_and_hold(slider).move_by_offset(a, 0).release().perform()
time.sleep(20)
driver.quit()


四、结论
滑块验证是一种常见的网站安全机制,但也可以通过自动化工具进行破解。使用Selenium结合适当的技巧和方法,你可以有效地解决滑块验证问题。然而,请始终确保你的行为符合法律和道德标准,尊重网站的版权和隐私权。在处理真实网站时,务必先获得适当的授权或遵循相关法律和指导方针。文章来源地址https://www.toymoban.com/news/detail-824953.html

到了这里,关于Selenium解决滑块验证问题:自动化与技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止,所以如何解决滑块问题已经成为自动化测试不可或缺的,今天以网易易盾网站的滑块举例:https://dun.163.com/trial/sense 要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用python中的numpy库来实现获取滑块在背景的坐标,获

    2024年02月12日
    浏览(35)
  • 使用selenium模拟登录解决滑块验证问题

    目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了

    2024年02月16日
    浏览(42)
  • 爬虫-selenium自动化(3)-验证码

    #验证码分很多种,奇葩也无处不在:哪个是真茅台,红绿灯,摩托车......(我是个人都看不出来) (๑ó﹏ò๑) #本节内容为selenium自动化实现验证码通过-------字符验证码,点触验证码。            

    2024年01月21日
    浏览(48)
  • 解决python+selenium自动化,打开谷哥浏览器窗口么会自动关闭问题

    # 导包 from selenium import webdriver from selenium.webdriver.common.by import By # 实例化浏览器,且浏览器对象的初始化放在定义的方法函数外,以全局变量的形式使用 wd = webdriver.Chrome() # 已配置环境变量 def get(): #

    2024年02月14日
    浏览(56)
  • [Python自动化]selenium之验证码识别

    这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将Python运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。在开始Python自动化相关实战的学习前,建议对 Python语言本身 以及 Python 爬虫 的相关知识展开一定的学习与了解。对此博客已开

    2023年04月08日
    浏览(53)
  • Python利用Selenium实现自动化验证登录

    Python里面使用Selenium是一个很重要的自动化测试模块,我们可以用它写一个验证登录脚本,有了这个可以用来保存cookie信息等,下面是一个简单的demo:

    2024年02月15日
    浏览(46)
  • Selenium+2Captcha 自动化+验证码识别实战

    本文深入探讨了使用Selenium库进行网页自动化操作,并结合2Captcha服务实现ReCAPTCHA验证码的破解。内容涵盖Selenium的基础知识、验证码的分类、2Captcha服务的使用,以及通过实例进行的详细讲解,最后对实践进行总结和优化思考,为读者提供了一条完整的验证码破解实践路线图

    2024年02月14日
    浏览(51)
  • selenium--自动化识别图片验证码并输入

    首先注册百度智能云账号(这里我用的是百度智能云):    1.要在这里面保存好API Key 和 Secret Key  2.然后进入查看文档   在pycharm中: 导入自动化文件: 在写自动化脚本时调用封装的百度类: 注意:自动化识别文字可能会出现识别不出来的可能,要解决这个Bug。 代码分享:

    2024年02月11日
    浏览(50)
  • Selenium+Python自动化测试之验证码处理

    验证码识别技术 (很难达到100%) 添加Cookie (*****五星推荐) 逻辑方式: 1:打开验证码所在页面,截图。获取验证码元素坐标,剪切出验证码图片,识别 以途牛为例 代码: 步骤: 1:获取指定cookie: get_cookie(cookie名) 2:获取本网站所有本地cookies: get_cookies() 3:添加cookie:ad

    2024年02月04日
    浏览(43)
  • selenium解决巨难的js逆向滑块验证问题!!!

    需要控制滑块,完成访问验证   使用selenium进行滑块识别,总是失败。 网站识别出是机器在进行爬取。 实现规避检测,让网站检测不到。 2、调整Chorme特征值 让系统不认为chorme是机器在操作 用16进制编辑器打开 Chormedriver.exe , 查找并替换 $cdc_lasutopfhvcZLmcfl 为等量字符的内容

    2024年02月13日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包