滑动验证码的破解(python+opencv+selenium)

这个周末突然接到电话,要监听一个网页内容,如果网页发生了变化,需要邮件通知。第一感觉这个事应该挺简单的啊,用爬虫把页面读取下来,如果和上次爬取的内容不一样,不就说明发生了变化了嘛。这个时候我把改网页打开,突然发现,what,竟然是要登录后才能跳转到想要的网页,心想这个也没有什么吗,大不了我把账号,密码填进去不就ok了么,当我把账号密码填进去,又TM出幺蛾子了,竟然出现了如下的滑动验证码。
在这里插入图片描述
这个时候,我心里一万个羊驼奔驰而过,就一个网页监听,至于这么事么,为了完成领导的安排,我还是踏实的的解决吧。记得以前看过类似的验证码破解,网页源码里会有背景原图和缺口图,两个图一对比就能找到缺口的位置。于是我满怀希望的按下F12,希望能找到这两张图,当我找到图的时候,我才发现什么是魔高一尺,道高一丈。我找到的是两张这样的图。
在这里插入图片描述
在这里插入图片描述

验证码竟然升级了,不再提供背景原图了,只给了滑块和缺口背景图。这个我就有点挠头皮了,这可如何是好,于是我又刷新了几下,发现滑块的起始位置的x坐标是固定的,滑块是水平移动的,不会在上下方向进行移动,这样我想,我只要找到缺口的位置,不就知道滑块需要滑动多远的距离了。这个时候我想到了使用opencv来确定缺口的位置。然后使用selenium来模拟人为拖动滑块。
总结一下:
1.使用selenium实现输入账号密码并点击登录。
2.使用urllib获取验证码的图片。
3.使用opencv来确定缺口的位置。
4.使用selenium实现拖动滑块到指定位置。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
import urllib
import cv2
import numpy as np

#这个函数是用来显示图片的。
def show(name):
    cv2.imshow('Show',name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
#这里我用的google的驱动。
driver = webdriver.Chrome()
url='http://syspt.aiigd.cn/#'

#实现登录
def get_login(driver,url):
    driver.get(url)
    elem=driver.find_element_by_xpath('//*[@id="username"]')
    elem.send_keys('11111')
    elem=driver.find_element_by_xpath('//*[@id="password"]')
    elem.send_keys('11111')
    elem=driver.find_element_by_xpath('//*[@id="login"]')
    elem.
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值