python实现网站自动登录(selenium实现,带验证码识别)

一、前言

这是鄙人写的第一篇博客,旨在总结一下近期所学,本文通过selenium工具实现工作所用网站的自动登录,下图为网站登录界面。

1、运行环境

操作系统:Windows10
python版本:python3.7

2、需要的python第三方库

1、selenium
安装:pip install selenium

selenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具。支持的浏览器包括IE、Chrome和Firefox等。

另外还需要下载浏览器驱动,我这里用的是Google浏览器驱动。
Google浏览器驱动:官网地址

选择适配的浏览器版本和Windows系统,然后将下载得到的exe文件放到python的安装目录下。
2、baidu_api
安装:pip install baidu_api

baidu_api是百度文字识别的OCR(Optical Character Recognition,光学字符识别),很多人可能会用tesseract库,但以测试的效果来看,百度的API识别效果更好。了解此库大家可以看官方文档。 百度OCR-API官方文档
3、pillow
安装:pip install pillow

pillow库是python最常用的第三方图像处理库

二、代码实现

1、导入第三方库

from selenium import webdriver
from PIL import Image
from aip import AipOcr

2、验证码的获取与处理

在进行验证码的获取之前,需要先实例化一个browser对象,代码如下:

browser = webdriver.Chrome()  # 实例化对象

获取验证码的方法是通过实例化后的browser对象的查找元素方法的得到验证码元素并截图。
下为网站源代码的验证码标签。

代码如下:

url = 'http://120.77.44.123/Login/Login.aspx?title=exit&recode=1'
browser.get(url)
png = browser.find_element_by_id('captcha_img')  # 查找验证码元素
png.screenshot('capt.png')  # 对验证码进行截图并保存

这是获得的验证码图片:

为了提高验证码的识别率,我们需要用pillow库对验证码进行图像处理。
处理方法如下:
1、先将图像转换成灰度模式
2、通过对阈值的调整使得多余的噪点消失

img = Image.open('capt.png')
img = img.convert('L')  # P模式转换为L模式(灰度模式默认阈值127)
count = 165  # 设定阈值
table = []
for i in range(256):if i < count:table.append(0)else:table.append(1)img = img.point(table, '1')
img.save('captcha1.png')  # 保存处理后的验证码

处理效果如下:

可以通多对阈值的调整使得程序获得更高的识别率。

3、验证码的识别

处理完验证码后现在我们可以对其进行识别,调用baidu_api的通用文字识别接口,官方文档上有详细的调用方法,每日可以免费使用5000次,这个数字也够挥霍了。

# 识别码
APP_ID = '*** '
API_KEY = '***'
SECRET_KEY = '***'
# 初始化对象
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
def get_file_content(file_path):with open(file_path, 'rb') as f:return f.read()image = get_file_content('captcha.png')
# 定义参数变量
options = {'language_type': 'ENG', }  # 识别语言类型,默认为'CHN_ENG'中英文混合
#  调用通用文字识别
result = client.basicGeneral(image, options)  # 高精度接口 basicAccurate
for word in result['words_result']:captcha = (word['words'])print('识别结果:' + captcha)return captcha

这是打印出的识别结果:

整体来看,识别效果还可以,当然这个验证码本身就不难。

4、自动键入信息并登录

这里用到的依然是browser对象的元素查找方法,代码如下:

browser.find_element_by_id('j_username').send_keys('***')  # 找到账号框并输入账号
browser.find_element_by_id('j_password').send_keys('***')  # 找到密码框并输入密码
browser.find_element_by_id('j_captcha').send_keys(captcha)  # 找到验证码框并输入验证码
browser.find_element_by_id('login_ok').click()  # 找到登陆按钮并点击

代码执行到这里,也就实现了网站的自动登录,下面是程序的完整代码。

三、完整代码

from selenium import webdriver
from PIL import Image
from aip import AipOcr# 验证码的获取和处理
def get_captcha():# 获取验证码图片url = 'http://120.77.44.123/Login/Login.aspx?title=exit&recode=1'browser.get(url)png = browser.find_element_by_id('captcha_img')png.screenshot('capt.png')  # 将图片截屏并保存# 处理验证码img = Image.open('capt.png')img = img.convert('L')  # P模式转换为L模式(灰度模式默认阈值127)count = 160  # 设定阈值table = []for i in range(256):if i < count:table.append(0)else:table.append(1)img = img.point(table, '1')img.save('captcha.png')  # 保存处理后的验证码# 验证码的识别
def discern_captcha():# 识别码APP_ID = '*** 'API_KEY = '***'SECRET_KEY = '***'# 初始化对象client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片def get_file_content(file_path):with open(file_path, 'rb') as f:return f.read()image = get_file_content('captcha.png')# 定义参数变量options = {'language_type': 'ENG', }  # 识别语言类型,默认为'CHN_ENG'中英文混合#  调用通用文字识别result = client.basicGeneral(image, options)  # 高精度接口 basicAccuratefor word in result['words_result']:captcha = (word['words'])print('识别结果:' + captcha)return captcha# 登录网页
def login(captcha):browser.find_element_by_id('j_username').send_keys('***')  # 找到账号框并输入账号browser.find_element_by_id('j_password').send_keys('***')  # 找到密码框并输入密码browser.find_element_by_id('j_captcha').send_keys(captcha)  # 找到验证码框并输入验证码browser.find_element_by_id('login_ok').click()  # 找到登陆按钮并点击def get_file():browser.find_element_by_xpath('/html/body/header/div/nav/ul/li[6]/a').click()  # 找到文件按钮并点击if __name__ == '__main__':browser = webdriver.Chrome()  # 实例化对象get_captcha()captcha = discern_captcha()login(captcha)get_file()

python实现网站的自动登录(selenium实现,带验证码识别)相关推荐

  1. python课设总结_Python技术分享课总结:用Python模拟知乎自动登录

    原标题:Python技术分享课总结:用Python模拟知乎自动登录 Python语言是由Guido van Rossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门&quo ...

  2. Python零基础之自动登录12306

    Python零基础之自动登录12306 文章目录 Python零基础之自动登录12306 需要注意的问题 直接上代码 分析过程在代码注释中已经写的较为清楚 功能实现是代码运行后打开生成的code2图片 ...

  3. Python爬虫,京东自动登录,在线抢购商品

    京东抢购 Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等. 可以指定抢购商品,自动购买下单,然后手动去京东付款就行. chang log 2017-03-30 实现二维码扫码 ...

  4. 双十一到啦,Python教你如何自动登录京东,在线抢购商品

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

  5. 800行Python代码实现京东自动登录抢购商品,坐等付款就好了

    京东抢购 Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等. 可以指定抢购商品,自动购买下单,然后手动去京东付款就行. 运行环境 Python 2.7 第三方库 Request ...

  6. 快速入门!Python爬虫,京东自动登录,在线抢购商品!

    话不多少,今天教大家如何用Python爬虫,自动登录京东网站,查询商品库存,价格,显示购物车详情等.可以指定抢购商品,自动购买下单,然后手动去京东付款就行. 运行环境 Python 2.7 第三方库 ...

  7. selenium之自动登录获取短信验证码或者图形验证码的方法

    对于很多项目的登录界面都是需要一个验证码的,对于验证码的方式有两种,一种是纯数字,就是验证码是通过发送短信的这种,这种比较好获取,另一种是图形验证码,有些图形验证码比较简单,比如纯数字的,有些比较复杂 ...

  8. Python 淘宝联盟自动登录

    上节讲了如何提取优惠券信息,需要获取 淘宝联盟 登录后得 Cookie ,从而可以进一步获取到商品得优惠券信息.但是每次手动登录很麻烦有没有,为了能偷懒,我们当然要把这个给解决掉撒. 怎么解决呢,当然 ...

  9. 基于python,控制微信自动登录并发送消息给指定联系人

    给出微信联系人.微信启动路径.消息内容,实现自动登录并并发送消息,如果需要定时发送可以开一个线程或者用while True实现.上代码,报错的话可能是缺少对应的库,自行百度安装即可. 下面代码 复制后 ...

最新文章

  1. Android 解读Event和Main Log
  2. WWDC2019:iPad全新发布
  3. SM30里如何输入物料号自动带出物料描述
  4. 亲身验证切实可行的python项目部署方案
  5. forward_list容器
  6. java 静态缓存示例_Java 9 JShell示例:集合静态工厂方法
  7. Java基础之写文件——使用多个视图缓冲区(PrimesToFile2)
  8. CentOS7 ISCSI服务器搭建
  9. JZOJ5918【NOIP2018模拟10.20】Car
  10. 实现前后端数据交互方法汇总
  11. php中提示Undefined index的解决方法
  12. 内存中的fas和lsp
  13. 锋利的jQuery(汇总)
  14. echarts地图数据过旧,通过geojson自定义经纬度地图
  15. 【LeetCode 深度优先搜索专项】不同岛屿的数量 II(711)
  16. chrome浏览器强制采用https加密链接
  17. word对齐表格不在一行的文字
  18. DirectX11实现FFT海面模拟
  19. python 提取pdf格式电子发票并改名
  20. 基于Modis数据监测森林火灾

热门文章

  1. 【技术贴】火狐QQ空间音乐插件下载+火狐进空间没背景音乐崩溃解决+火狐浏览器插件推荐...
  2. 中国联通公司与中国移动的差别,就在这!
  3. linux 修改mysql默认端口3306
  4. Android实习周记:第二周,(IT==不停的学习) is TRUE
  5. ENVI/IDL编程:批量使用伪不变目标法进行相对辐射校正
  6. Landscape-版图几何设计规则DRC
  7. 【Java面试宝典】1000+面试题附答案详解,最全面详细
  8. 《乔布斯传》今日(10/24)10时05分全球同步首发
  9. Loadrunner 11安装教程
  10. Typora使用学习通图床