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

article/2025/10/3 0:55:07

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()

http://chatgpt.dhexx.cn/article/rKAa1BND.shtml

相关文章

登录页面的代码

登录页面的代码 在把页面和数据库做好之后&#xff0c;我的登录页面只需要 用户名和密码 &#xff0c;所以代码比较简单。 先找到登录按钮&#xff0c;给一个点击事件&#xff0c;然后再获取他们的表单值&#xff0c;然后对用户名和密码进行判断&#xff0c;判断是否填写了资料…

核函数(多项式,高斯核)以及svm解决回归问题

文章目录 一、SVM最优化问题转换1、多项式核函数 二、高斯核函数1.引入库1、多项式特征2、高斯核函数升维举例3、高斯核函数超参数gamma 三、svm解决回归问题总结 一、SVM最优化问题转换 变换为数学上一个更好解的 在这个式子中有重要的一项Xi&#xff0c;Xj 两个样本的点乘…

高斯核-高斯模糊

大白话高斯模糊 以二维高斯为例&#xff0c;公式&#xff1a; 高斯模糊的原理,可以理解成每一个像素都取周边像素的加权平均值 以高斯分布取g矩阵的值得到的模糊方法即为高斯模糊 权重矩阵 假定中心点的坐标是&#xff08;0,0&#xff09;&#xff0c;那么距离它最近的8个点的…

数值实验-高斯核函数 python/matlab 实现

支持向量机 支持向量&#xff1a;支持平面把两类类别划分开的超平面的向量点机&#xff1a;一种算法SVM 是一种二分类模型线性可分支持向量机&#xff1a;通过硬间隔最大化&#xff0c;学习一个线性分类器线性支持向量机&#xff1a;通过软间隔最大化&#xff0c;学习一个线性…

CS131专题-2:高斯核、噪声、滤波

目录 1 高斯核 1.1 一维定义 1.2 二维定义 1.2.1 应用高斯核的过程 1.2.2 不同σ值的高斯核情况 1.2.3 不同核宽度情况 1.2.4 高斯核&#xff08;滤波&#xff09;特性 1.2.5 使用高斯核做平滑滤波相对箱式滤波的优点 2 噪声 和 滤波 2.1 椒盐噪声、脉冲噪声 2.1.1 …

python高斯核函数_机器学习:SVM(核函数、高斯核函数RBF)

一、核函数(Kernel Function) 1)格式 K(x, y):表示样本 x 和 y,添加多项式特征得到新的样本 x、y,K(x, y) 就是返回新的样本经过计算得到的值; 在 SVM 类型的算法 SVC() 中,K(x, y) 返回点乘:x . y 得到的值; 2)多项式核函数 业务问题:怎么分类非线性可分的样本…

高斯整数matlab,Matlab---自适应高斯核

MCNN提出了适用于高密度人群的自适应高斯核: 笔者所理解的自适应高斯核函数: %function:通过高斯核产生相应的密度矩阵 %parameter: im:输入图像,灰度图; points:标注的点[X Y],n*2的矩阵 function im_density = get_density_map_autogaussian(im,points) im_density =…

高斯核原理详解+生成高斯核的Python代码

要搞清楚高斯核的原理的话&#xff0c;把下面这篇博文认认真真看一遍就可以了&#xff0c;链接如下&#xff1a; https://blog.csdn.net/u013066730/article/details/123112159 下面是我认为值得注意和需要补充说明的几点&#xff1a; 1 为什么高斯滤波能够让图像实现模糊化&a…

C语言哈希表UT_hash的使用方法详解

由于C语言本身不存在哈希,因此&#xff0c;我们可以调用开源的第三方头文件&#xff0c;这只是一个头文件&#xff1a;uthash.h&#xff0c;使用时只需要在文件首部编写#include<uthash.h>即可。 uthash的使用 #include "uthash.h" struct my_struct {int id…

utxo 是什么

UTXO 代表 Unspent Transaction Output。 在比特币社区里&#xff0c;Transaction 被简称为 TX&#xff0c;所以上面这个短语缩写为 UTXO。一般会认为 UTXO 是比特币区块链设计当中的一部分&#xff0c;但事实上 UTXO 和区块链没有必然的联系&#xff0c;你可以完全照搬比特币区…

UT单元测试(一)——基础流程总结篇

参考书籍《单元测试的艺术》 一、单元测试的定义 一个单元测试是一段代码&#xff08;通常是一个方法&#xff09;&#xff0c;这段代码调用另一段代码&#xff08;一个单元可以是一个方法或函数&#xff09;&#xff0c;然后检验某些假设的正确性。如果这些假设是正确的&a…

UT标记详细说明

原来论坛用的是UT标记&#xff0c;UT是UltraThreads的简写。 微软word用的是Microsoft Word XML。 网页用的html ------------------------------------------------------------------ 什么是UT代码&#xff1f; UT标记对HTML的简化。一般情况下&#xff0c;即使指定讨论区禁…

UT-890J ( USB -2- RS422/485 Cable )

USB -2- RS422/485 Cable < 參考 網路文章 / 規格書 > DB9 公頭 (有 DB9轉 KF128螺絲端子轉接板 ) UT890_20190220152556_43695-2.pdf 驅動下載: UT890_Win XP Server2003 2008 Vista 7 8 32-64bit FT-232 USB-232 Chip USB -2- RS422/485 Cable < 參考文章 / 規格書…

RTU是什么及其用途

RTU是Remote Terminal Unit&#xff08;远程终端单元&#xff09;的缩写&#xff0c;是一种用于实现现动器等现场控制设备&#xff0c;实现对现场设备的实时监控&#xff0c;用途包括以下几个方面&#xff1a; 1.压力、流量等。 2.实时监测&#xff1a;RTU可以对现场设备进行…

RTU和DTU的区别是什么?

在物联网应用中&#xff0c;我们经常使用到两种数据传输设备——DTU和RTU。它们的功能大致相似&#xff0c;但又有些许不同。那在实际应用中&#xff0c;什么情况选择DTU&#xff0c;什么情况选择RTU呢&#xff1f;下面我们就一起来看看&#xff0c;它们之间到底有什么区别以及…

RTU和DTU分别是什么?

RTU和DTU是两种常见的远程数据采集和传输设备&#xff0c;虽然它们都是用于实现远程数据采集和传输&#xff0c;但在一些方面存在不同&#xff0c;下面是两者的区别。1、定义RTU是Remote Terminal Unit的缩写&#xff0c;翻译为“远程终端单元”&#xff0c;它是一种用于实现远…

硬刚Hive | 4万字基础调优面试小总结

本文基本涵盖以下内容&#xff1a; 一、基于Hadoop的数据仓库Hive基础知识二、HiveSQL语法三、Hive性能优化四、Hive性能优化之数据倾斜专题五、HiveSQL优化十二板斧六、Hive面试题(一)七、Hive/Hadoop高频面试点集合(二) 基于Hadoop的数据仓库Hive基础知识 Hive是基于Hadoop的…

数据结构知识点_重点期考总结复习

目录 前言数据数据的逻辑结构和物理结构逻辑结构物理结构&#xff08;存储结构&#xff09; 算法特性和时间复杂度算法的五大特性算法的时间复杂度 线性表线性表两种存储结构顺序表链型表线性表分析 栈和队列栈队列 串串的基本操作定长存储结构堆分配存储结构块链存储表示串的模…

前端JS/TS面试题

JS面试题总结 一、this指向问题&#xff08;1&#xff09;this的理解&#xff08;2&#xff09;怎样改变this的指向问题&#xff08;3&#xff09;Call,bind,apply三者的区别&#xff08;4&#xff09;容易判读错的几种this情况&#xff08;5&#xff09;this指向问题&#xff…

3.Hadoop Hive服务

接上文—————> 目录&#xff1a; 一.安装二.have基本命令操作三.hive数据仓库四.hive表的类型&#xff1a;五.hive中重要的元数据表六.hive的连接方式七.使用jdbc编写外部程序操作hive八.hive的基本数据类型九.hive的复杂的数据类型十.hive的建表语句十一.hive 删除表十…