Python 爬虫模拟登陆,破解滑块验证码_pyautogui 阿里滑块

简介

最近用了将近一周的时间,做了一个我也不知道有啥用的东西----Python爬虫(京东)。

当然重点不是这,相信不少像我这样的菜鸟在用Python弄爬虫项目的时候,遇到最痛苦的就是被验证码拦在了门外,我也是花了好几天的时间去研究,终于解决了这一难关。

需要源码的小伙伴复制下面即可,有闲心情的可以继续看下去,听我叭叭几句(哈哈),记得把位置坐标啥的换了哈,还需要有selenium 火狐的插件,大家可以百度一下。

from urllib import request
from selenium import webdriver
import cv2
import random
import time
import pyautogui


# 获取图片信息,返回最佳匹配位置
def findPic(target="img1.jpg", template="img2.png"):
    # 读取图片
    target_rgb = cv2.imread(target)
    # 图片灰度化
    target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY)
    # 读取模块图片
    template_rgb = cv2.imread(template, 0)
    # 匹配模块位置
    res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED)
    # 获取最佳匹配位置
    value = cv2.minMaxLoc(res)
    # 返回最佳X坐标
    return value[2][0]


# 打开FireFox浏览器
driver = webdriver.Firefox()
driver.get("https://passport.jd.com/new/login.aspx")
driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div/div[3]/a').click()
driver.find_element_by_xpath('//\*[@id="loginname"]').send_keys('123456')
driver.find_element_by_xpath('//\*[@id="nloginpwd"]').send_keys('123456')
driver.find_element_by_xpath('//\*[@id="loginsubmit"]').click()

while True:
    try:
        # 从网页上获取组件
        target = driver.find_element_by_xpath('/html/body/div[4]/div/div/div/div[1]/div[2]/div[1]/img')
        template = driver.find_element_by_xpath('/html/body/div[4]/div/div/div/div[1]/div[2]/div[2]/img')
        # 获取模块的url路径
        src1 = target.get_attribute("src")
        src2 = template.get_attribute("src")
        # 下载图片
        request.urlretrieve(src1,"img1.jpg")
        request.urlretrieve(src2,"img2.png")
        x = findPic()
        w1 = cv2.imread('img1.jpg').shape[1]
        w2 = target.size['width']
        x = x / w1 \* w2
        # 按钮坐标
        offset_x,offset_y = 875,466
        # pyautogui库操作鼠标指针
        pyautogui.moveTo(offset_x,offset_y,duration=0.1 + random.uniform(0,0.1 + random.randint(1,100) / 100))
        pyautogui.mouseDown()
        offset_y += random.randint(9,19)
        pyautogui.moveTo(offset_x + int(x \* random.randint(15,25) / 20),offset_y,duration=0.28)
        offset_y += random.randint(-9,0)
        pyautogui.moveTo(offset_x + int(x \* random.randint(17,23) / 20),offset_y,
                         duration=random.randint(20,31) / 100)
        offset_y += random.randint(0,8)
        pyautogui.moveTo(offset_x + int(x \* random.randint(19,21) / 20),offset_y,
                         duration=random.randint(20,40) / 100)
        offset_y += random.randint(-3,3)
        pyautogui.moveTo(x + offset_x + random.randint(-3,3),offset_y,duration=0.5 + random.randint(-10,10) / 100)
        offset_y += random.randint(-2,2)
        pyautogui.moveTo(x + offset_x + random.randint(-2,2),offset_y,duration=0.5 + random.randint(-3,3) / 100)
        pyautogui.mouseUp()
        time.sleep(1)
        result = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div/div[4]/div[2]/div').text
        if '不匹配' in result:
            print("账户名密码不匹配!", result)
            break
    except:
        print("异常!")
        break

技术

selenium

网上都说selenium是一个自动化测试的类库,其他的先不说,selenium用在爬虫上是真的般配,用selenium实现模拟的登陆,操作页面上的各种组件,完全代替了人工,简直神器啊,细节我就不说了,初学的小伙伴可以先去了解一下selenium库。

账号输入,点击之后就是验证码的界面,这个时候就需要另一个神器了。

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值