python滑块验证码

python滑块验证码python 自动滑块验证码

前言

网上有不少关于滑块验证码的文章,要么就是说了一堆原理断断续续的放一些代码块,要么就是收费!!!都没什么卵用
今天给大家分享一篇Python自动验证滑块验证码的操作!,你只需要复制粘贴就行,原理不细说,一些简要说明在代码备注中


提示:以下是代码正文内容

# -*- coding: utf-8 -*- import numpy as np import random from selenium.webdriver import ActionChains import time from selenium import webdriver from PIL import Image import os from selenium.webdriver.support.ui import WebDriverWait # opencv-python需要安装这个模块 import cv2 class Login(object): """ 腾讯防水墙滑动验证码激活成功教程 使用OpenCV库 成功率大概90%左右:在实际应用中,登录后可判断当前页面是否有登录成功才会出现的信息:比如用户名等。循环 https://open.captcha..com/online.html 激活成功教程 腾讯滑动验证码 腾讯防水墙 python + seleniuum + cv2 """ def __init__(self): # 如果是实际应用中,可在此处账号和密码 self.url = "https://open.captcha..com/online.html" self.driver = webdriver.Chrome() @staticmethod def show(name): cv2.imshow('Show', name) cv2.waitKey(0) cv2.destroyAllWindows() @staticmethod def webdriverwait_send_keys(dri, element, value): """ 显示等待输入 :param dri: driver :param element: :param value: :return: """ WebDriverWait(dri, 10, 5).until(lambda dr: element).send_keys(value) @staticmethod def webdriverwait_click(dri, element): """ 显示等待 click :param dri: driver :param element: :return: """ WebDriverWait(dri, 10, 5).until(lambda dr: element).click() @staticmethod def get_postion(chunk, canves): """ 判断缺口位置 :param chunk: 缺口图片是原图 :param canves: :return: 位置 x, y """ otemp = chunk oblk = canves target = cv2.imread(otemp, 0) template = cv2.imread(oblk, 0) # w, h = target.shape[::-1] temp = 'temp.jpg' targ = 'targ.jpg' cv2.imwrite(temp, template) cv2.imwrite(targ, target) target = cv2.imread(targ) target = cv2.cvtColor(target, cv2.COLOR_BGR2GRAY) target = abs(255 - target) cv2.imwrite(targ, target) target = cv2.imread(targ) template = cv2.imread(temp) result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED) x, y = np.unravel_index(result.argmax(), result.shape) return x, y # # 展示圈出来的区域 # cv2.rectangle(template, (y, x), (y + w, x + h), (7, 249, 151), 2) # cv2.imwrite("yuantu.jpg", template) # show(template) @staticmethod def get_track(distance): """ 模拟轨迹 假装是人在操作 :param distance: :return: """ # 初速度 v = 0 # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移 t = 0.2 # 位移/轨迹列表,列表内的一个元素代表0.2s的位移 tracks = [] # 当前的位移 current = 0 # 到达mid值开始减速 mid = distance * 7 / 8 distance += 10 # 先滑过一点,最后再反着滑动回来 # a = random.randint(1,3) while current < distance: if current < mid: # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细 a = random.randint(2, 4) # 加速运动 else: a = -random.randint(3, 5) # 减速运动 # 初速度 v0 = v # 0.2秒时间内的位移 s = v0 * t + 0.5 * a * (t  2) # 当前的位置 current += s # 添加到轨迹列表 tracks.append(round(s)) # 速度已经达到v,该速度作为下次的初速度 v = v0 + a * t # 反着滑动到大概准确位置 for i in range(4): tracks.append(-random.randint(2, 3)) for i in range(4): tracks.append(-random.randint(1, 3)) return tracks @staticmethod def urllib_download(imgurl, imgsavepath): """ 下载图片 :param imgurl: 图片url :param imgsavepath: 存放地址 :return: """ from urllib.request import urlretrieve urlretrieve(imgurl, imgsavepath) def after_quit(self): """ 关闭浏览器 :return: """ self.driver.quit() def login_main(self): # ssl._create_default_https_context = ssl._create_unverified_context driver = self.driver driver.maximize_window() driver.get(self.url) click_keyi_username = driver.find_element_by_xpath("//div[@class='wp-onb-tit']/a[text()='可疑用户']") self.webdriverwait_click(driver, click_keyi_username) login_button = driver.find_element_by_id('code') self.webdriverwait_click(driver, login_button) time.sleep(1) driver.switch_to.frame(driver.find_element_by_id('tcaptcha_iframe')) # switch 到 滑块frame time.sleep(0.5) bk_block = driver.find_element_by_xpath('//img[@id="slideBg"]') # 大图 web_image_width = bk_block.size web_image_width = web_image_width['width'] bk_block_x = bk_block.location['x'] slide_block = driver.find_element_by_xpath('//img[@id="slideBlock"]') # 小滑块 slide_block_x = slide_block.location['x'] bk_block = driver.find_element_by_xpath('//img[@id="slideBg"]').get_attribute('src') # 大图 url slide_block = driver.find_element_by_xpath('//img[@id="slideBlock"]').get_attribute('src') # 小滑块 图片url slid_ing = driver.find_element_by_xpath('//div[@id="tcaptcha_drag_thumb"]') # 滑块 os.makedirs('./image/', exist_ok=True) self.urllib_download(bk_block, './image/bkBlock.png') self.urllib_download(slide_block, './image/slideBlock.png') time.sleep(0.5) img_bkblock = Image.open('./image/bkBlock.png') real_width = img_bkblock.size[0] width_scale = float(real_width) / float(web_image_width) position = self.get_postion('./image/bkBlock.png', './image/slideBlock.png') real_position = position[1] / width_scale real_position = real_position - (slide_block_x - bk_block_x) track_list = self.get_track(real_position + 4) ActionChains(driver).click_and_hold(on_element=slid_ing).perform() # 点击鼠标左键,按住不放 time.sleep(0.2) # print('第二步,拖动元素') for track in track_list: ActionChains(driver).move_by_offset(xoffset=track, yoffset=0).perform() # 鼠标移动到距离当前位置(x,y) time.sleep(0.002) # ActionChains(driver).move_by_offset(xoffset=-random.randint(0, 1), yoffset=0).perform() # 微调,根据实际情况微调 time.sleep(1) # print('第三步,释放鼠标') ActionChains(driver).release(on_element=slid_ing).perform() time.sleep(1) print('登录成功') self.after_quit() if __name__ == '__main__': phone = "" login = Login() login.login_main() 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199544.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:45
下一篇 2026年3月20日 下午12:46


相关推荐

  • js网页如何获取手机屏幕宽度

    js网页如何获取手机屏幕宽度

    2021年10月31日
    51
  • CentOS系统下Redis安装和自启动配置的步骤

    CentOS系统下Redis安装和自启动配置的步骤

    2021年10月11日
    60
  • FFmpeg从入门到精通笔记之一库介绍

    FFmpeg从入门到精通笔记之一库介绍FFmpeg:FastForwardMovingPictureExpertsGroup(mpeg:动态图像专家组)H.264:国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式.H.264是ITU-T以H.26x系列为名称命名的标准之一AVC(AdvanedVideoCoding):ISO/IECMPEG一方对H.264的称呼…

    2022年6月26日
    24
  • iOS 邮箱正则表达式[通俗易懂]

    iOS 邮箱正则表达式[通俗易懂]邮箱正则表达式

    2022年6月24日
    33
  • 【转录调控网络】典型的基因转录调控网络推导方法——奇异值分解

    【转录调控网络】典型的基因转录调控网络推导方法——奇异值分解基因转录调控网络推导方法 奇异值分解奇异值分解是线性代数中的一种矩阵分解方法 在信号处理和统计学等领域应用广泛 目前 奇异值分解已被广泛应用在大规模基因表达数据分析 例如 Yeung 等利用奇异值分解法在稀疏条件下重建了基因调控网络 实验证明该方法具有较高的准确性 而且具有较低的计算复杂度 为了减少复杂度 这种方法只考虑了稳态情况下的调控关系 并用一个线性微分方程组 方程 1 来表示 dxi t dt ixi t j 1nWijxi t b t i t i 1 2 n frac m

    2025年7月26日
    7
  • ip addr命令详解_ip link命令

    ip addr命令详解_ip link命令Windows上查看IP地址是ipconfig命令。Linux上查看IP地址是ifconfig命令。Linux上还有一个ipaddr命令可以查看IP地址。博主使用标准版ISO镜像文件安装的CentOS7没有ifconfig命令,但有ipaddr命令。其实通过这几个命令查到的IP都是私网IP,想要了解详情可以阅读这篇博客:为什么百度查到的IP和ipconfig命令的结果不一样、详解公网IP、私网IP、网络分类(A、B、C)ipaddr命令结果有两部分,lo和enp0s3,如果有多

    2022年7月28日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号