话不多说直接上代码, 不懂的直接看注释或者私信

import timefrom urllib import requestimport cv2
import pyautogui
from selenium import webdriver
from selenium.webdriver import ChromeOptions
import random# 登陆账号
USERNAME = 'xxxx'
# 登陆密码
PASSWORD = 'xxxx'
# 滑块距离屏幕左上角的x, y像素, 需根据自己屏幕大小调整
SLIDE_X_POSITION, SLIDE_Y_POSITION = 881, 441class SlideUtils:@staticmethoddef find_pic(background, slide):"""获取背景图与滑块图的最佳位置"""# 读取背景灰度图片background_gray = cv2.imread(background, 0)# 读取滑块灰度图片slide_gray = cv2.imread(slide, 0)# 匹配滑块位置res = cv2.matchTemplate(background_gray, slide_gray, cv2.TM_CCOEFF_NORMED)# 获取最佳与最差匹配value = cv2.minMaxLoc(res)return value[2][0]@staticmethoddef slide_by_autogui(x, y, offset):"""使用pyautogui实现滑块并自定义轨迹方程"""xx = x + offsetpyautogui.moveTo(x, y, duration=0.1)pyautogui.mouseDown()y += random.randint(9, 19)pyautogui.moveTo(x + int(offset * random.randint(15, 23) / 20), y, duration=0.28)y += random.randint(-9, 0)pyautogui.moveTo(x + int(offset * random.randint(17, 21) / 20), y, duration=random.randint(20, 31) / 100)y += random.randint(0, 8)pyautogui.moveTo(xx, y, duration=0.3)pyautogui.mouseUp()def send_keys_interval(element, text, interval=0.1):"""webdriver 模拟人输入文本信息"""for c in text:element.send_keys(c)time.sleep(random.randint(int(interval * 500), int(interval * 1500)) / 1000)class JdLoginChromeWebdriverPlus:"""京东登录chrome webdriver增强"""def __init__(self, retry_times=5):option = ChromeOptions()option.add_experimental_option('excludeSwitches', ['enable-automation'])self.driver = webdriver.Chrome(options=option)self.driver.maximize_window()self.retry_times = retry_timesself.login_success = Falsedef login(self, username, password):driver = self.driverdriver.get('https://passport.jd.com/uc/login')# 切換账号密码登录driver.find_element_by_class_name('login-tab-r').find_element_by_tag_name('a').click()# 设置账号密码send_keys_interval(driver.find_element_by_id('loginname'), username)send_keys_interval(driver.find_element_by_id('nloginpwd'), password)time.sleep(random.random())# 登录driver.find_element_by_id('loginsubmit').click()time.sleep(random.randint(1, 3))for i in range(self.retry_times):# 获取验证码图片# 用于找到登录图片的大图try:background = driver.find_element_by_xpath(r'//div/div[@class="JDJRV-bigimg"]/img')except:# 未查找到登陆图片则认为成功self.login_success = Truebreak# 用来找到登录图片的小滑块slide = driver.find_element_by_xpath(r'//div/div[@class="JDJRV-smallimg"]/img')background_url = background.get_attribute("src")slide_url = slide.get_attribute("src")background_img = 'background_img.png'slide_img = 'slide_img.png'# 下载背景大图保存到本地request.urlretrieve(background_url, background_img)# 下载滑块保存到本地request.urlretrieve(slide_url, slide_img)# 获取最佳x偏移量x = SlideUtils.find_pic(background_img, slide_img)print(f'本地最佳偏移量: {x}')# 计算缩放# 获取下载背景图宽度w1 = cv2.imread(background_img).shape[1]# 获取网页背景图宽度w2 = background.size['width']# 计算实际页面x偏移量x = x * w2 / w1print(f'实际最佳偏移量: {x}')# 其中x为屏幕左上角至滑块中心的横向像素值,y为屏幕左上角至滑块中心纵向像素值, 可根据自己屏幕配置SlideUtils.slide_by_autogui(SLIDE_X_POSITION, SLIDE_Y_POSITION, x)def is_login(self):"""是否已登录成功 """return self.login_successdef get_cookies(self):"""获取webdriver cookies"""return self.driver.get_cookies()def get_cookies_dict(self):"""获取字典结构的cookie"""cookies = self.get_cookies()res = {}for cookie in cookies:res[cookie['name']] = cookie['value']return resdef get_driver(self):"""获取webdriver对象"""return self.driverdef close(self):self.driver.close()def quit(self):self.driver.quit()driver = JdLoginChromeWebdriverPlus()
driver.login(USERNAME, PASSWORD)
print(driver.is_login())
print(driver.get_cookies_dict())
driver.quit()

滑块轨迹方程参考: https://www.bilibili.com/video/BV1cC4y1Y7Wm

python 实现京东滑块验证码登录相关推荐

  1. Python如何解决“京东滑块验证码”(5)

    前言 本文是该专栏的第51篇,后面会持续分享python爬虫干货知识,记得关注. 多数情况下使用模拟登录会遇到滑块验证码的问题,对于普通的滑块验证码,使用selenium可以轻松解决.但是对于滑块缺失 ...

  2. 我就问你为啥要破解图形验证码、滑块验证码登录?就为了上去点个赞、发个文?

    文章目录 疑问 方案 方案一 方案二 方案三 实现方案二 结论 疑问 这到底算不算是一个问题? 出于何种考虑,非得要去破解验证码.滑块验证码登录? 首先,本人并不认为这是一个问题,或者叫技术难点< ...

  3. Python OpenCV 图片滑块验证码 滑块图片验证码 快速自动识别方案 代码简单 模板匹配识别 识别成功率达90%+

    前言 通过上一篇的文章大家已经对图片滑块验证码已经有了初步的了解,图片滑块验证码的核心关键在于图片识别接下来接入讲解.因为初版滑块图片识别虽然能识别验证码,通过一些策略调整也相对提高了一些图片识别率, ...

  4. 实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证

    导读 本文主要介绍如何使用Python+OpenCV实现滑块验证码->自动拖动验证. 背景介绍 前几天在某网站下载代码时,跳转到滑块验证码界面,需要验证OK后才能下载,貌似这种验证方式现在很流行 ...

  5. Python高效实现滑块验证码自动操纵

    CDA数据分析师 出品作者:CDALevel Ⅰ 持证人岗位:数据分析师 行业:大数据 众所周知,规范性的网络爬虫可以帮助Decision-maker在低成本下获得想要的信息,不仅如此,做科研.写论文 ...

  6. Python Selenium破解滑块验证码最新版!

    通过率高达百分之95!真的强! 一.滑块验证码简述 有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展.而目前最流行的反爬技术验证码,为了防止爬虫自动注册,批量生成垃圾账号, ...

  7. python发送短信验证码登录_python发送短信验证码

    原标题:python发送短信验证码 业务: 手机端点击发送验证码,请求发送到python端,由python调用榛子云短信http://smsow.zhenzikj.com的短信接口,生成验证码并发送. ...

  8. python手工打码_使用Python + Selenium破解滑块验证码

    在前面一篇博客,介绍了 Selenium 的基本用法和爬虫开发过程中经常使用的一些小技巧,利用这些写出一个浏览器爬虫已经完全没有问题了.看了前一篇博客,可能有人会有疑惑,浏览器爬虫的优势感觉并不比传统 ...

  9. python实现滑动京东滑块验证码

    目录 前置的一些配置 验证码图片的下载 计算偏移 实现滑动效果 完整代码 结尾 前置的一些配置 from urllib import request import cv2 from selenium ...

最新文章

  1. Git教程:最详细、最傻瓜、最浅显、真正手把手教!
  2. @EnableScheduling和@Scheduled的使用(初级)
  3. remo video repair中文版
  4. 蓝桥杯单片机十一届省赛_“第十届蓝桥杯青少组C++省赛”前三题解题思路及参考答案!...
  5. win7计算机菜单,教您win7右键菜单设置方法
  6. react Link跳转无效_react常见的问题及解决办法
  7. sqlalchemy in查询优化_SQL高级:代码实战 SQL 单表优化
  8. java index.jsp为什么不默认跳转_Java开发人员怎么面试 常见Redis面试题有哪些
  9. 上传文件到云服务器一般用什么软件?
  10. ABAP调用HTTP服务
  11. 拼音分词器_自动补全
  12. 常见文件文件头和隐写术总结 CTF中Misc必备
  13. 计算机建立第2用户,2016年计算机二级VF备考练习题及参考答案(5)
  14. table 手机 滑动_移动端touch事件滚动
  15. A002-186-2639-高艳萍
  16. 移动硬盘 无法读取 插入电脑没反应 无法识别 怎么办
  17. Python复制单个文件为多个脚本
  18. table中填写数据并批量增加
  19. 数据库是如何通过索引定位数据,索引的原理讲解
  20. 在eclipse中修改tomcat端口

热门文章

  1. Docker入门到部署
  2. python远程安装软件_在家想远程公司电脑?Python + 微信一键连接!
  3. Vue实现3D全景图,photo-sphere-viewer
  4. 亲测可用~ Ubuntu20.04 findfont: Font family [‘sans-serif‘] not found. Times New Roman 字体缺失
  5. 随机获取歌曲信息播放php,网易云热评随机获取PHP代码
  6. Android 更换开机logo和开机动画
  7. bootstrap显示遮罩层
  8. 内容部分超出出现滚动,隐藏滚动条(还可以滚动)
  9. vue 父子组件mounted执行顺序
  10. 有五个人坐一起,问第五个多少岁?(java)