2020-7-2 by 微风

思路

1 使用webdriver调用谷歌浏览器,然后请求滴滴打码网站。
2 通过selenium的xpath定位方法找到输入账号、密码、验证码、登陆的位置,并且传送具体的账号、密码给对应的位置。
3 对于传送验证码的问题:首先需要重新单独请求验证码,然后将验证码下载到本地,接着使用超级鹰来识别下载到本地的验证码,把识别后的验证码传送到网页中输入验证码的位置。
4 点击登陆的位置。

from selenium import webdriver
import request#打开谷歌浏览器
driver = webdriver.Chrome(r'D:\Python37\Lib\chromedriver.exe')
#请求滴滴打码网站
driver.get('http://www.ddocr.com/user/login.html')
#传送账号、密码到相应的位置
driver.find_element_by_xpath('//*[@id="account"]').send_keys('账号')
driver.find_element_by_xpath('//*[@id="password"]').send_keys('密码')#重新单独请求验证码
src = driver.find_element_by_xpath('//*[@id="verifyImg"]').get_attribute('src')
yanzhengma = requests.get(src)
#将验证码下载到本地
with open('yanzhengma.jpg','wb') as file:file.write(yanzhengma.content)
#使用超级鹰识别下载到本地的验证码
#定义Chaojiying_Client类的代码是超级鹰官网自带的
from hashlib import md5
class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf8')).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()
chaojiying = Chaojiying_Client('账号', '密码', '软件ID')
im = open('yanzhengma.jpg', 'rb').read()#将超级鹰识别的验证码传入网页中输入验证码的位置。
driver.find_element_by_xpath('//*[@id="verity"]').send_keys(chaojiying.PostPic(im, 1004)['pic_str'])
#点击登陆
driver.find_element_by_xpath('//*[@id="userLogin"]/div[4]/button').click()

运行后的bug

运行后发现自动输入验证码时与网页上显示的验证码并不一致。经过思考后,明白了问题出在思路的第三步。因为网页上显示的验证码是我们第一次请求滴滴打码时的验证码,而自动输入的验证码是我们第二次重新单独请求的验证码。这两次请求的验证码并不一致,所以就出现了这个bug。即思路的第三步并不可行。

解决的办法

思路的第三步

1 使用selenium截取全屏,然后再截取全屏中特定区域(即验证码的区域)的图片。
①使用selenium截取百度网页全屏

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
browser.get('https://www.baidu.com')
time.sleep(3)# 用 get_screenshot_as_file('绝对路径') 方法来截取全屏,并把截取的全屏保存到绝对路径。
# 注:保存的图片格式必须为png。
browser.get_screenshot_as_file('C:\Users\desktop\quanping.png')

②截取全屏中特定区域的图片

from PIL import Image# 对验证码所在位置进行定位,注意定位时电脑的缩放布局必须要设置为100%,不然定位不准确。img = driver.find_element_by_xpath('code')time.sleep(2)# location属性以字典的形式返回该图片对象(既这张图片)在浏览器中的坐标。假设图片的坐标是(30,30) 即返回{‘x’:30,‘y’:30} 坐标轴是以屏幕左上角为原点,x轴向右递增,y轴向下递增。location = img.location# size属性以字典的形式返回该图片对象(即这张图片)的宽度和高度。假设图片的宽度和高度均为30,即返回{‘height’:30,‘width’:30}size = img.sizeleft = location['x']top = location['y']right = left + size['width']bottom = top + size['height']# pillow模块使用crop((left, up, right, below))方法来裁剪图片obj = Image.open('quanping.png')yanzhengma = obj.crop((left, top, right, bottom))# yanzhengma.show()# 把截取到的验证码图片下载到本地。Image.save('yanzhengma.png')  


2 使用超级鹰对下载到本地的验证码进行识别。
3 把超级鹰识别后的验证码传送到网页中输入验证码的位置。

from selenium import webdriver
import requests#打开谷歌浏览器
driver = webdriver.Chrome(r'D:\Python37\Lib\chromedriver.exe')
#打开浏览器后发送get请求
driver.get('http://www.ddocr.com/user/login.html')
driver.find_element_by_xpath('//*[@id="account"]').send_keys('账号')
driver.find_element_by_xpath('//*[@id="password"]').send_keys('密码')from PIL import Image
driver.get_screenshot_as_file('D:\PycharmProjects\爬虫\quanping.png')
obj = Image.open('quanping.png')# 要注意截取验证码时电脑的缩放布局必须要设置为100%,不然定位不准确。
location = driver.find_element_by_xpath('//*[@id="verifyImg"]').location
size = driver.find_element_by_xpath('//*[@id="verifyImg"]').sizeleft = location['x']
top = location['y']
right = left + size['width']
bottom = top + size['height']
yanzhengma = obj.crop((left,top,right,bottom))
yanzhengma.save('yanzhengma.png')#使用超级鹰识别下载到本地的验证码
#定义Chaojiying_Client类的代码是超级鹰官网自带的
from hashlib import md5
class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf8')).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()
chaojiying = Chaojiying_Client('账号', '密码', '软件ID')
im = open('yanzhengma.png', 'rb').read()#将超级鹰识别的验证码传入网页中输入验证码的位置。
driver.find_element_by_xpath('//*[@id="verity"]').send_keys(chaojiying.PostPic(im, 1004)['pic_str'])
#点击登陆
driver.find_element_by_xpath('//*[@id="userLogin"]/div[4]/button').click()

使用selenium自动登陆滴滴打码网相关推荐

  1. 使用selenium自动登陆b站 图片文字验证识别

    文章目录 前言 一. 反,反反爬虫 1.反爬虫 2.反反爬虫 二,超级鹰 三.完整代码 1.导包 2.超级鹰接口 3.连接手动开启的浏览器 4.定位文本框标签 5.图片文字识别 6.文本处理,坐标处理 ...

  2. Scrapy爬虫+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单

    此货很干,跟上脚步!!! Cookie cookie是什么东西? 小饼干?能吃吗? 简单来说就是你第一次用账号密码访问服务器 服务器在你本机硬盘上设置一个身份识别的会员卡(cookie) 下次再去访问 ...

  3. python京东自动签到_爬虫实战【10】利用Selenium自动登陆京东签到领金币

    今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币. 如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前 ...

  4. python京东自动签到领金豆_爬虫实战【10】利用Selenium自动登陆京东签到领金币...

    今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币. 如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前 ...

  5. selenium自动登陆校园网wifi(含验证码处理)

    每次登陆川农wifi都要输入密码,账号,验证码.好麻烦有木有,作为一个伪技术工作者,本着装逼的原则,准备自己写个脚本自动登陆wifi,川农校园wifi验证码简单,随便处理下识别率几乎百分百,脚本实用性 ...

  6. 【Servlet】请求转发、重定向、Cookie使用之三天自动登陆

    三天自动登陆项目源码:GitHub地址-LoginSystem JDBC 手写SORM框架 手写Servlet 开发环境:Eclipse 一.请求乱码问题解决 // 设置请求.响应编码格式req.se ...

  7. winform模拟登陆网页_Python爬虫使用selenium爬取群成员信息(全自动实现自动登陆)...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...

  8. python+selenium+pytesseract实现自动识别简单验证码,并且自动登陆网站

    文章目录 功能介绍 首先安装需要的库 编写代码 功能介绍 本文章实现自动识别验证码并且自动登陆网站,完全不需要人工操作 Python版本:3.6 Selenium:selenium 是一个用于 Web ...

  9. Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...

最新文章

  1. Linux top命令常见使用
  2. ava线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束
  3. 机器学习中倒三角符号_机器学习的三角误差
  4. C# -- HttpWebRequest 和 HttpWebResponse 的使用
  5. Git-本地库与中央库
  6. 我的世界java导出皮肤_我的世界Alex1.8夕立poi皮肤
  7. 产品研发过程管理专题——软件测试过程管理实践
  8. Windows7 共享文件夹不能访问(原创)
  9. 这么多前端优化点你都记得住吗?
  10. 非对称加密 DH算法
  11. 视觉SLAM十四讲中P61作业7。
  12. 【Linux】Linux文件权限的理解
  13. 软件测试工程师面试题汇总
  14. 40K成功入职:六年开发终获小米Offer(附面经+面试题+答案详解)
  15. C语言:比较三个数(double类型)的大小
  16. iPad 使用技巧:Apple Pencil
  17. “看得到的解说”上线 咪咕视频智能字幕带来暖心陪伴
  18. 成都拓嘉启远:7万名网友砍拼多多手机,失败?
  19. linux 安装防病毒软件,04Linux环境下Norton防病毒软件安装和使用.doc
  20. echarts地图可视化 中国地图及各省级js文件分享

热门文章

  1. elementui-input限制输入正整数
  2. 鲲鹏计算产业发展白皮书 附下载
  3. php中实现记住密码下次自动登录的例子
  4. 施努卡:3d机器视觉检测系统 3d视觉检测应用行业
  5. 主板开机电路故障的维修实例
  6. 基于Java+JSP+MySQL共享单车管理系统的设计与实现-计算机毕业设计
  7. 单页应用 (SPA)
  8. 世纪佳缘2014Q4净收入1.728亿元 同比增29.9%
  9. 你有哪些受益无穷的好习惯
  10. 玩客云 N1路由 各种盒子 s805 s905 s9系列等