基于selenium完成滑块验证

2023-11-01

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


def get_distance():
    background = cv2.imread('background_src.png', 0)
    gap = cv2.imread('gpg_src.png', 0)
    res = cv2.matchTemplate(background, gap, cv2.TM_CCOEFF_NORMED)
    value = cv2.minMaxLoc(res)[2][0]
    print(value)
    # 比例转换 下载的图片与实际图片有一定的比例
    return value * 278 / 360


def main():
    chrome = webdriver.Chrome()
    chrome.implicitly_wait(5)
    chrome.get('https://passport.jd.com/new/login.aspx')
    login = chrome.find_element(By.CLASS_NAME, 'login-tab-r')
    login.click()
    time.sleep(5)
    username = chrome.find_element(By.ID, 'loginname')
    username.send_keys('aaaaaaa')
    time.sleep(1)
    password = chrome.find_element(By.ID, 'nloginpwd')
    password.send_keys('asdfasdf')
    button = chrome.find_element(By.ID, 'loginsubmit')
    button.click()
    time.sleep(3)
    background_src = chrome.find_element(By.XPATH, '//div[@class="JDJRV-bigimg"]/img').get_attribute("src")
    gap_src = chrome.find_element(By.XPATH, '//div[@class="JDJRV-smallimg"]/img').get_attribute("src")
    request.urlretrieve(background_src, 'background_src.png')
    request.urlretrieve(gap_src, 'gpg_src.png')
    # 计算滑块距离
    distance = int(get_distance())
    # 滑动滑块
    element = chrome.find_element(By.CLASS_NAME, 'JDJRV-slide-btn')
    ActionChains(chrome).click_and_hold(on_element=element).perform()  # 模拟鼠标按住不放
    ActionChains(chrome).move_by_offset(xoffset=distance, yoffset=0).perform()
    ActionChains(chrome).release(on_element=element).perform()
    time.sleep(5)


if __name__ == "__main__":
    main()

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于selenium完成滑块验证 的相关文章

随机推荐

  • Ubuntu 18.04 出现GLIBC_2.28 not found的解决方法(亲测有效)

    关于 lib x86 64 linux gnu libc so 6 version GLIBC 2 28 not found 出现报错 建议不要使用源码包去编译并升级 在下文有分享一个使用官方的Debian软件包去升级使用的方法 仅供参考
  • Android开发中的Unable to resolve superclass of L错误解决方法

    这个方法一般是因为引入第三方包造成的 注意android support v4等等也算 解决方法 项目上右键 gt Build Path gt Configure Build Path gt Order and Export里将引入的第三方
  • 头歌:字符串处理

    一 字符串的拼接 将要处理的字符串存放在变量中之后 可直接加 额外 空格需要用 框起来使用 二 字符串的转换 1 获取长度 使用函数len 注意使用字符串变量和直接应用字符串内容的区别 字符串需要加 符号 创建字符串是 输入的字符串也需要加
  • Qt只出现 exited with code 3的错误

    我的这个错误是在debug的时候报错 但是release和profile是可以正常运行的 各种百度以后 还是没有找到解决办法 自己无意中尝试将mingw32改为Mingw64重新运行之后就没问题了 好神奇 虽然解决了bug 但是还是不清楚其
  • 浅谈Http长连接和Keep-Alive以及Tcp的Keepalive

    Keep Alive模式 我们知道Http协议采用 请求 应答 模式 当使用普通模式 即非Keep Alive模式时 每个请求 应答 客户端和服务器都要新建一个连接 完成之后立即断开连接 当使用Keep Alive模式时 Keep Aliv
  • 微服务开发概要设计

    Software environment requirements The software environment includes the software on which the project runs Such as web a
  • NumPy 笔记(超级全!收藏√)

    文章目录 NumPy 教程 NumPy Ndarray 对象 NumPy 数据类型 数据类型对象 dtype NumPy 读取数据 NumPy 数组属性 ndarray ndim ndarray shape ndarray itemsize
  • myslq主从同步和常用命令

    MySQL 5 7 multi source replication 简单的说就是一从多主 从5 7后MySQL开始支持 环境资源 现有4台pc Ip OS alias 172 171 17 144 fedora linux 24 slav
  • centos7使用镜像作为本地yum源

    搭建本地yum源 配置网络 配置网络命令 可使用Tab键辅助 nmcli connection modify ens33 ipv4 method manual ipv4 addresses 192 168 131 161 24 ipv4 g
  • 基于ESP8266实现STM32的远程IAP程序升级(2)

    第二节 串口IAP程序改良 2 1 一种简单直观的方法 2 2 另一种改良版直观方法 2 3 通用IAP升级方法 正点原子的例程仅实现了从IAP至APP程序的跳转 并不能从APP跳转回IAP程序中 但是实际应用中 当我要更新APP程序时 我
  • ElementUI浅尝辄止38:Upload 上传

    通过点击或者拖拽上传文件实现上传功能 常见于文件 文件夹或图片上传 使用挺频繁的 需要熟练掌握 1 如何使用 点击上传 通过 slot 你可以传入自定义的上传按钮类型和文字提示 可通过设置limit和on exceed来限制上传文件的个数和
  • Android开发基础 -- android studio 使用第三方模拟器连接方法,如海马玩模拟器

    安装完模拟器后 要使用adb命令Android studio才能识别出来 打开cmd 输入 adb connect 127 0 0 1 26944 如下 海马玩模拟器的端口号是26944 逍遥安卓模拟器的端口号是21503 夜神玩模拟器的端
  • 【C++】常用容器-string容器

    1 string基本概念 2 string构造函数 include
  • Job for vsftpd.service failed because the control process exited with error code

    systemctl start vsftpd serviceJob for vsftpd service failed because the control process exited with error code See syste
  • 编写一个简单的Linux内核模块

    为了在运行时动态增加和删除某个功能 Linux内核引入了内核模块这一机制 可在内核运行时加载一组目标代码来实现某个特定的功能 这样在实际使用Linux的过程中就不需要重新编译内核代码来实现动态扩展 为了深入Linux内核的学习 我们从编写一
  • docker基础篇-----03-----联合文件系统、docker镜像加载原理、 镜像的特点和优点、容器副本commit生成新镜像

    参考文章 学习笔记 尚硅谷周阳老师的Docker教程学习笔记 一 Docker镜像 1 联合文件系统 UnionFS UnionFS Union file system 是一种分层 轻量级并且高性能的文件系统 它支持对文件系统的修改作为一次
  • Pytorch Tutorial 学习笔记(四)Tensorboard

    Pytorch Tutorial 学习笔记 四 Tensorboard Pytorch官方文档 https pytorch org tutorials Tensorboard是pytorch中可视化工具 使用前需要安装pytorch ten
  • 二. Netty 入门

    Netty学习之路 一 NIO基础 二 Netty 入门 三 Netty 进阶 四 Netty 优化与源码 学完netty手写了一个rpc项目 链接 https gitee com springchuntian1 netty rpc 笔记源
  • 学习前端----1个月

    不知不觉前端已经学习了一个月 这一个月也收获了很多 从一名小菜鸟到现在的慢慢的了解 慢慢的适应 感觉每天的生活很充实 html文字介绍 文字介绍 h1 h6是标题数字越大 标题越小 p 是一个段落 br 换行 hr 水平尺 b加粗标签 em
  • 基于selenium完成滑块验证

    import time from selenium import webdriver from selenium webdriver common by import By import cv2 from selenium webdrive