Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_134
今天有同学提出了一个需求,老板让自动登录这个页面:https://www.dianxiaomi.com/index.htm,毫无疑问登录页面基本都会有在线验证码,要破解这个验证码当然不是啥难事,诚然可以自己去训练模型,然而大量的训练集测试数据还得自己去打码,说白了,不值当,有现成的接口可以用,何乐而不为,于是我们向万恶的百度伸出了魔爪。
首先申请百度api开发平台:https://cloud.baidu.com/
随后在人工智能-》文字识别 模块里建立一个应用
建立成功后,会分配给你一个key和secret
只不过这个接口免费版的每秒最多只能请求两次,一天有500次的请求机会
这里推荐使用高精度的接口,普通的识别率太差了
第一步,获取access_token
res = requests.get("https://aip.baidubce.com/oauth/2.0/token?grant\_type=client\_credentials&client\_id=你的key&client\_secret=你的秘钥")
res = json.loads(str(res.text))
token = res\['access\_token'\]
然后请求高精度识别接口,需要注意一点,这里图片需要转换成base64编码
temp\_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate\_basic?access\_token=' + token
temp\_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
temp\_file = open('./test.png', 'rb')
temp\_image = temp\_file.read()
temp\_file.close()
temp\_data = {'image': base64.b64encode(temp\_image)}
temp\_data = urllib.parse.urlencode(temp\_data)
temp\_res = requests.post(url=temp\_url, data=temp\_data, headers=temp\_headers)
res = json.loads(str(temp\_res.text))
code = res\['words\_result'\]\[0\]\['words'\]
百度接口会将识别出的验证码文字返回给你,当然了有一定误差是在所难免的
现在验证码识别已经搞定,问题的关键是,每次打开页面的时候,怎么将图片传给百度接口
其实很简单,我们可以考虑使用selenium自动化工具来截图,selenium是可以根据选择器做局部截图的
nodes = driver.find\_element\_by\_id('loginImgVcode')
nodes.screenshot('test.png')
虽然可以截图,但是其实发现有东西干扰了验证码图片
原来是旁边讨厌的广告挡住了验证码,这样的干扰会让识别产生误差
其实这些html标签是可以移除的,使用selenium运行js代码来删除这些干扰元素
#删除元素
js = "var elem = document.getElementsByClassName('dnf');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
js = "var elem = document.getElementsByClassName('qqshow');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
js = "var elem = document.getElementsByClassName('QR');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
再截图一次,看到已经干净了很多
剩下的就很简单了,直接利用selenium输入账号密码以及验证码就可以自动登录,非常轻松,完整代码如下:
import requests
import json
import base64
import urllib
from selenium import webdriver
import time
#selenium 截图
driver = webdriver.Chrome()
driver.get('https://www.dianxiaomi.com/index.htm')
time.sleep(1)
#删除元素
js = "var elem = document.getElementsByClassName('dnf');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
js = "var elem = document.getElementsByClassName('qqshow');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
js = "var elem = document.getElementsByClassName('QR');elem\[0\].parentNode.removeChild(elem\[0\]);"
driver.execute\_script(js)
nodes = driver.find\_element\_by\_id('loginImgVcode')
nodes.screenshot('test.png')
#用户名 exampleInputName exampleInputPassword
driver.find\_element\_by\_id('exampleInputName').send\_keys('18231327142')
driver.find\_element\_by\_id('exampleInputPassword').send\_keys('Xw1995410')
#请求百度api接口
res = requests.get("https://aip.baidubce.com/oauth/2.0/token?grant\_type=client\_credentials&client\_id=你的key&client\_secret=你的秘钥")
res = json.loads(str(res.text))
token = res\['access\_token'\]
temp\_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate\_basic?access\_token=' + token
temp\_headers = {'Content-Type': 'application/x-www-form-urlencoded'}
temp\_file = open('./test.png', 'rb')
temp\_image = temp\_file.read()
temp\_file.close()
temp\_data = {'image': base64.b64encode(temp\_image)}
temp\_data = urllib.parse.urlencode(temp\_data)
temp\_res = requests.post(url=temp\_url, data=temp\_data, headers=temp\_headers)
res = json.loads(str(temp\_res.text))
print(res)
code = res\['words\_result'\]\[0\]\['words'\]
driver.find\_element\_by\_id('loginVerifyCode').send\_keys(code.strip().replace(' ',''))
#登录按钮
driver.find\_element\_by\_id('loginBtn').click()
time.sleep(10)
driver.close()
原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_134
Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面的更多相关文章
- 爬虫03 /代理、cookie处理、模拟登录、提升爬虫效率
爬虫03 /代理.cookie处理.模拟登录.提升爬虫效率 目录 爬虫03 /代理.cookie处理.模拟登录.提升爬虫效率 1. 代理 2. cookie处理 3. 模拟登录 4. 如何提升爬取数据 ...
- selenium跳过webdriver检测并模拟登录淘宝
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网 ...
- python3.7爬虫:使用Selenium带Cookie登录并且模拟进行表单上传文件
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_142 前文再续,书接上一回,之前一篇文章我们尝试用百度api智能识别在线验证码进行模拟登录:Python3.7爬虫:实时api(百 ...
- 百度收录检测并主动推送API(实时 mip推送通用)
简要描述: 百度收录检测并主动推送API(实时) 请求URL: api.bigjiji.com/baiduCheck_123456 调用方式: img标签 参数: 参数名 必选 类型 说明 site ...
- 百度AI开放平台- API实战调用
百度AI开放平台- API实战调用 一. 前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...
- c# 利用AForge和百度AI开发实时人脸识别
baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...
- 什么?小程序实时语音识别你还在痛苦的对接科大讯飞?百度Ai识别?
前言 微信小程序,说不上大火,但是需求还是不少的.各大企业都想插一足 于是前端同学就有事情做了. 需求 我需要录音 我边说话边识别,我要同声传译,我要文字转语音,还要萝莉音 我:??? 正文 一开始, ...
- 百度AI文本审核API使用说明
虽然,虽然,虽然,今天: 百度发布了2019年第一季度未经审计的财务报告.本季度百度营收241亿元人民币(约合35.9亿美元),同比增长15%,移除业务拆分收入影响,同比增长21%.低于市场预期242 ...
- scrapy爬虫框架调用百度地图api数据存入数据库
scrapy安装配置不在本文 提及, 1.在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令 scrapy startproject mySpider 其中, my ...
随机推荐
- python模块,邮件推送交换机error级别以上log,django前端展示
前情概要 原syslog服务器只收集不推送日志,可以实时展示,服务器在海外内网,办公网做的有分流,到日志服务器的流量送到香港,其余流量国内,疫情期间在家办公,每次连接需要拨海外l2tp,挂着梯子访问国 ...
- CF1682F MCMF?
题意: 费用流,其实bushi 给你长为\(n\)的序列\(a\),\(b\).\(a\)单增,\(b\)有正有负. \(q\)次询问\([l,r]\),保证\(\sum\limits_{i=l}^r ...
- GO GMP协程调度实现原理 5w字长文史上最全
1 Runtime简介 Go语言是互联网时代的C,因为其语法简洁易学,对高并发拥有语言级别的亲和性.而且不同于虚拟机的方案.Go通过在编译时嵌入平台相关的系统指令可直接编译为对应平台的机器码,同时嵌入 ...
- 【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate('oauth-bearer', {session: false})
问题描述 在前两篇博文中,对NodeJS Express应用 使用MSAL + AAD实现用户登录并获取用户信息,获取Authorization信息 ( ID Token, Access Token) ...
- npm切换到国内华为云的镜像
npm下载包很慢?不能忍,切换到国内华为云的镜像吧. npm config set registry https://repo.huaweicloud.com/repository/npm/ npm ...
- 论文阅读 Real-Time Streaming Graph Embedding Through Local Actions 11
9 Real-Time Streaming Graph Embedding Through Local Actions 11 link:https://scholar.google.com.sg/sc ...
- 在公网服务器搭建CobaltStrike4.0
因为工作需要使用cs,正好之前腾讯云薅了一把羊毛,就把VPS装起来cs. 选的环境是centos7.6 cs运行需要java环境 先使用yum -y list java* 查看yum存在的java库 ...
- 揭秘GaussDB(for Redis):全面对比Codis
摘要:Codis集群在国内Redis生态圈很流行,社区已停止维护.本文从架构和特性两方面对比,带你感受华为云GaussDB(for Redis)的全新价值. 本文分享自华为云社区<华为云Gaus ...
- 好用到爆!GitHub 星标 32.5k+的命令行软件管理神器,功能真心强大!
前言(废话) 本来打算在公司偷偷摸摸给星球的用户写一篇编程喵整合 MongoDB 的文章,结果在通过 brew 安装 MongoDB 的时候竟然报错了.原因很简单,公司这台 Mac 上的 homebr ...
- RPA 快手自动上传机器人
1.打开账号Cookie预存表格 2.机器人自动登录账号 3.机器人开始按照预设视频位置开始自动上传视频 4.机器人开始自动填写视频相关信息内容 5.完成后,可自动切换下一个账号继续上传