原文转载自「刘悦的技术博客」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)页面的更多相关文章

  1. 爬虫03 /代理、cookie处理、模拟登录、提升爬虫效率

    爬虫03 /代理.cookie处理.模拟登录.提升爬虫效率 目录 爬虫03 /代理.cookie处理.模拟登录.提升爬虫效率 1. 代理 2. cookie处理 3. 模拟登录 4. 如何提升爬取数据 ...

  2. selenium跳过webdriver检测并模拟登录淘宝

    目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网 ...

  3. python3.7爬虫:使用Selenium带Cookie登录并且模拟进行表单上传文件

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_142 前文再续,书接上一回,之前一篇文章我们尝试用百度api智能识别在线验证码进行模拟登录:Python3.7爬虫:实时api(百 ...

  4. 百度收录检测并主动推送API(实时 mip推送通用)

    简要描述: 百度收录检测并主动推送API(实时) 请求URL: api.bigjiji.com/baiduCheck_123456 调用方式: img标签 参数: 参数名 必选 类型 说明 site ...

  5. 百度AI开放平台- API实战调用

    百度AI开放平台- API实战调用 一.      前言 首先说一下项目需求. 两个用户,分别上传了两段不同的文字,要计算两段文字相似度有多少,匹配数据库中的符合条件的数据,初步估计列出来会有60-1 ...

  6. c# 利用AForge和百度AI开发实时人脸识别

    baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是 ...

  7. 什么?小程序实时语音识别你还在痛苦的对接科大讯飞?百度Ai识别?

    前言 微信小程序,说不上大火,但是需求还是不少的.各大企业都想插一足 于是前端同学就有事情做了. 需求 我需要录音 我边说话边识别,我要同声传译,我要文字转语音,还要萝莉音 我:??? 正文 一开始, ...

  8. 百度AI文本审核API使用说明

    虽然,虽然,虽然,今天: 百度发布了2019年第一季度未经审计的财务报告.本季度百度营收241亿元人民币(约合35.9亿美元),同比增长15%,移除业务拆分收入影响,同比增长21%.低于市场预期242 ...

  9. scrapy爬虫框架调用百度地图api数据存入数据库

    scrapy安装配置不在本文 提及, 1.在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令 scrapy startproject mySpider 其中, my ...

随机推荐

  1. python 动态规划(背包问题和最长公共子串)

    背包问题 现在要往一个可以装4个单位重量的背包里怎么装价值最高:A重量1个单位,价值15:B重量3个单位,价值20:C重量4个重量,价值30 使用动态规划填充空格 class SolutionBag: ...

  2. 98. 验证二叉搜索树 前序遍历解法以及后续遍历解法(go语言)

    leetcode题目 98. 验证二叉搜索树 前序遍历 最简洁的答案版本,由于先判断的是根节点,所以直接判断当前root的值v,是否满足大于左子树最大,小于右子树最小,然后再遍历左子树,右子树是否是这 ...

  3. spring boot 统一接口异常返回值

    创建业务 Exception 一般在实际项目中,推荐创建自己的 Exception 类型,这样在后期会更容易处理,也比较方便统一,否则,可能每个人都抛出自己喜欢的异常类型,而造成代码混乱 Servic ...

  4. Go内存管理一文足矣

    最早学习C.C++语言时,它们都是把内存的管理全部交给开发者,这种方式最灵活但是也最容易出问题,对人员要求极高:后来出现的一些高级语言像Java.JavaScript.C#.Go,都有语言自身解决了内 ...

  5. unity---脚本创建按钮

    脚本创建按钮 新建文件夹 Resources 方便引用图片 在文件Resources中新建Images,并且下载一个图片 没有图片,按钮内容无法显示 图片需要处理一下 Textrue Type 改为 ...

  6. Mysql 存储引擎以及 SQL语句

    存储引擎 文件格式有很多种,针对不同的文件格式会有对应的不同存储方式和处理机制. 针对不同的数据应该有对应的不同处理机制来存储. 存储引擎就是不同的处理机制 MySQL主要的存储引擎 Innodb 是 ...

  7. 低代码前景可期,JNPF灵活易用,用智能定义新型办公模式

    JNPF是引迈信息从事多年软件研发和产品服务的一次时代性的技术革新产物,是集SaaS服务.工作流引擎.一站式低代码开发.支持多端使用于一体的快速开发平台. 强大易用 JNPF将 Excel. Acce ...

  8. 2021.03.06【NOIP提高B组】模拟 总结

    T1 看起来十分复杂,打表后发现答案是 \(n*m\mod p\) 具体的证明... 原式的物理意义,就是从坐标原点(0,0),用每一种合法的斜率, 穿过坐标[1 ~ n , 1 ~ m]的方阵中的整 ...

  9. Linux Cgroup v1(中文翻译)(4):Block IO Controller

    Block IO Controller 1 概览 cgroup子系统blkio实现了block io控制器.无论是对存储结构上的叶子节点和还是中间节点,它对各种IO控制策略(proportional ...

  10. Python数据分析--Numpy常用函数介绍(9)--Numpy中几中常见的图形

    在NumPy中,所有的标准三角函数如sin.cos.tan等均有对应的通用函数. 一.利萨茹曲线 (Lissajous curve)利萨茹曲线是一种很有趣的使用三角函数的方式(示波器上显示出利萨茹曲线 ...