python爬虫滑动验证码,python 爬虫模拟登陆,破解滑块验证码

  python爬虫滑动验证码,python 爬虫模拟登陆,破解滑块验证码

  本文介绍了python自动破解滑动验证码的解决方案,并通过实例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

  在Web自动化测试过程中,我们经常被登录验证码卡住,不知道验证码怎么过。

  一般情况下,我们遇到验证码,可以找开发帮忙解决,关闭验证码,或者给一个通用的验证码!

  那么如果开发没有帮助,我们有什么办法处理这些验证码呢?

  当然,答案是肯定的。常见的验证码一般分为两类,一类是图形验证码,一类是滑动验证码!

  

滑动验证破解思路

  一般来说,破解滑动验证码的思路是以下两步:

  1.获取滑块的滑动距离。2.模拟拖动滑块,通过验证。关于这个滑动验证码,滑块和缺口背景是分开的图像,我们可以把这两个图像,

  下载它借助图像识别技术识别背景图像中缺口的位置,然后减去滑块的当前位置得到滑动的距离。

  

案例讲解

  事不宜迟,我们先来看一个案例(QQ空间登录)。实现QQ空间登录案例的步骤如下:

  1.创建驱动对象,访问qq登录页面2,输入账号密码3,点击登录4,模拟滑动验证

实现代码

  导入时间

  从selenium导入web驱动程序

  从slideVerfication导入slideVerfication代码

  # 1.创建一个驱动程序对象并访问qq登录页面。

  浏览器=webdriver。铬合金()

  browser . get( https://qzone . QQ.com/)

  # 2.输入帐户密码。

  # 2.0单击切换到登录的iframe

  browser . switch _ to . frame( log in _ frame )

  # 2.1点击账户密码登录

  browser . find _ element _ by _ id( switcher _ plogin )。单击()

  # 2.2找到账号输入框,输入账号。

  browser.find_element_by_id(u )。发送键( 123456 )

  # 2.3位置密码输入输入密码

  browser.find_element_by_id(p )。send_keys(PYTHON )

  # 3.单击登录

  browser . find _ element _ by _ id( log in _ button )。单击()

  时间.睡眠(3)

  # 4.模拟滑动验证

  # 4.1切换到滑动验证码的iframe

  tcaptcha=browser . find _ element _ by _ id( tcaptcha _ iframe )

  browser . switch _ to . frame(tcaptcha)

  # 4.2获取滑动相关元素

  #选择拖动滑块的节点。

  slide _ element=browser . find _ element _ by _ id( tcaptcha _ drag _ thumb )

  #获取滑块图片的节点

  slide block _ ele=browser . find _ element _ by _ id( slide block )

  #获取凹口背景图片节点

  slide BG=browser . find _ element _ by _ id( slide BG )

  # 4.3计算滑动距离

  sc=SlideVerificationCode(save _ image=True)

  距离=sc . get _ element _ slide _ distance(slide block _ ele,slideBg)

  #滑动距离误差修正,滑动距离*网页上显示的图片的缩放比例-滑块的相对初始位置

  距离=距离*(280/680) - 22

  打印(“校正滑动距离”,距离)

  # 4.4,滑。

  sc.slide_verification(浏览器,slide_element,distance=100)

  操作效果:

  实际上,该模块的图像识别是在第三方图像处理模块的帮助下进行的。python中有很多现成的处理图像的库,本文使用opencv-python进行识别。上面在slideVerfication模块中使用的两种方法的一些参考代码如下:

  

根据传入滑块,和背景的节点,计算滑块的距离

  def get _ element _ slide _ distance(self,sli

  der_ele, background_ele, correct=0):

   """

   根据传入滑块,和背景的节点,计算滑块的距离

   该方法只能计算 滑块和背景图都是一张完整图片的场景,

   如果背景图是通过多张小图拼接起来的背景图,

   该方法不适用,请使用get_image_slide_distance这个方法

   :param slider_ele: 滑块图片的节点

   :type slider_ele: WebElement

   :param background_ele: 背景图的节点

   :type background_ele:WebElement

   :param correct:滑块缺口截图的修正值,默认为0,调试截图是否正确的情况下才会用

   :type: int

   :return: 背景图缺口位置的X轴坐标位置(缺口图片左边界位置)

   """

   # 获取验证码的图片

   slider_url = slider_ele.get_attribute("src")

   background_url = background_ele.get_attribute("src")

   # 下载验证码背景图,滑动图片

   slider = "slider.jpg"

   background = "background.jpg"

   self.onload_save_img(slider_url, slider)

   self.onload_save_img(background_url, background)

   # 读取进行色度图片,转换为numpy中的数组类型数据,

   slider_pic = cv2.imread(slider, 0)

   background_pic = cv2.imread(background, 0)

   # 获取缺口图数组的形状 -->缺口图的宽和高

   width, height = slider_pic.shape[::-1]

   # 将处理之后的图片另存

   slider01 = "slider01.jpg"

   background_01 = "background01.jpg"

   cv2.imwrite(background_01, background_pic)

   cv2.imwrite(slider01, slider_pic)

   # 读取另存的滑块图

   slider_pic = cv2.imread(slider01)

   # 进行色彩转换

   slider_pic = cv2.cvtColor(slider_pic, cv2.COLOR_BGR2GRAY)

   # 获取色差的绝对值

   slider_pic = abs(255 - slider_pic)

   # 保存图片

   cv2.imwrite(slider01, slider_pic)

   # 读取滑块

   slider_pic = cv2.imread(slider01)

   # 读取背景图

   background_pic = cv2.imread(background_01)

   # 比较两张图的重叠区域

   result = cv2.matchTemplate(slider_pic, background_pic, cv2.TM_CCOEFF_NORMED)

   # 获取图片的缺口位置

   top, left = np.unravel_index(result.argmax(), result.shape)

   # 背景图中的图片缺口坐标位置

   print("当前滑块的缺口位置:", (left, top, left + width, top + height))

   return left

  滑动滑块进行验证

  

def slide_verification(self, driver, slide_element, distance):

   """

   滑动滑块进行验证

   :param driver: driver对象

   :type driver:webdriver.Chrome

   :param slide_element: 滑块的元组

   :type slider_ele: WebElement

   :param distance: 滑动的距离

   :type: int

   :return:

   """

   # 获取滑动前页面的url地址

   start_url = driver.current_url

   print("需要滑动的距离为:", distance)

   # 根据滑动距离生成滑动轨迹

   locus = self.get_slide_locus(distance)

   print("生成的滑动轨迹为:{},轨迹的距离之和为{}".format(locus, distance))

   # 按下鼠标左键

   ActionChains(driver).click_and_hold(slide_element).perform()

   time.sleep(0.5)

   # 遍历轨迹进行滑动

   for loc in locus:

   time.sleep(0.01)

   ActionChains(driver).move_by_offset(loc, random.randint(-5, 5)).perform()

   ActionChains(driver).context_click(slide_element)

   # 释放鼠标

   ActionChains(driver).release(on_element=slide_element).perform()

  到此这篇关于python实现破解滑动验证码的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • qq短信验证码发送失败怎么回事,qq验证码失败是怎么回事
  • ,,使用阿里大于(大鱼)平台进行发送手机验证码的流程
  • ,,SpringSceurity实现短信验证码登陆
  • android读取短信验证码,
  • android读取短信验证码,,Android使用MobSDK短信验证
  • android自动获取短信验证码功能在哪,安卓自动获取短信验证码
  • android自动获取短信验证码功能在哪,android自动获取短信验证码功能失效,Android自动获取短信验证码功能
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现,Android实现短信验证码自动填写功能
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码,Android如何通过手机自动获取短信验证码
  • ,,python网络爬虫实现发送短信验证码的方法
  • ,,Python实现滑块拼图验证码详解
  • ,,python3 破解 geetest(极验)的滑块验证码功能
  • 发验证码不在桌面显示,验证码能收到桌面上不显示怎么回事
  • 留言与评论(共有 条评论)
       
    验证码: