Python实现自动登录(有验证码)---c语言网

文章目录

  • 前言
  • 一、前期准备
  • 二、python调用使用
    • 1.源代码
    • 2.需要做的准备
    • 3.执行代码
  • 总结
  • 参考文档


前言

用python最麻烦的就是导入所需要的包,实现这个自动登录需要下载time包用来给浏览器做一个缓冲等待时间;selenium用来启动浏览器、填写用户信息、提交等;PIL用来截图;
百度的Aip用来获取截图中的验证码。这里我会详细介绍如何导入这些包


提示:以下是本篇文章正文内容,下面案例可供参考

一、前期准备

导入包,这里我主要介绍百度的aip如何去下载,其他如果没有包的话,用pip下载就可以了。
使用百度的文字检索功能需要在百度智能云里面创建相关应用
登录所有和百度相关的应用都可以扫码登录,百度网盘、百度浏览器等等
进入之后,在产品服务里面点击语音、图像其中一个。
Python实现自动登录(有验证码)---c语言网_第1张图片
然后点击创建应用,选择图像栏就够用了,其他的服务看自己,有部分是需要付费的。
Python实现自动登录(有验证码)---c语言网_第2张图片
创建成功之后,就有了以下应用,下面在python调用接口,需要下面三个密钥
Python实现自动登录(有验证码)---c语言网_第3张图片
在python中使用方法,搜索快速入门中,有此段文字
Python实现自动登录(有验证码)---c语言网_第4张图片
pip一般都有,直接在cmd使用命令

pip install baidu-aip

setuptools官方网址
setuptoosl在官方下载好压缩包之后解压到目录,用cmd进入它所在的目录使用

python setup.py install

这样包就基本导入成功了,如果没有其他包可以自行百度,导入用pip就可以了,没啥难度

二、python调用使用

1.源代码

import time
from aip import AipOcr
from PIL import Image, ImageEnhance
from selenium import webdriver
from selenium.webdriver.common.by import By

url = "https://www.dotcpp.com/oj/loginpage.php"# 这里是c语言网的地址
# 1、打开浏览器,最大化浏览器
driver = webdriver.Firefox()
driver.get(url)
driver.implicitly_wait(10)
driver.maximize_window()

# 用户名元素
name=driver.find_element_by_name('user_id')
name.send_keys('**')# 这里是自己的用户名
values=name.get_attribute('value')
print(values)
pwd=driver.find_element_by_name('password')
pwd.send_keys('****')# 这里是自己的密码
pwdvalue=pwd.get_attribute('value')
print(pwdvalue)

# 2、截取屏幕内容,保存到本地
driver.save_screenshot("D://test/01.png")# 这里图片保存路径

# 3、打开截图,获取验证码位置,截取保存验证码
ran = Image.open("D://test/01.png")
box = (740, 392, 813, 420)  # 获取验证码位置,自动定位不是很明白,就使用了手动定位,代表(左,上,右,下)
ran.crop(box).save("D://test/01.png")# 这里是把验证码定位后保存的地址,相当于替换

# 4、获取验证码图片,读取验证码

imageCode = Image.open("D://test/01.png") # 图像增强,二值化
sharp_img = ImageEnhance.Contrast(imageCode).enhance(2.0)
sharp_img.save("D://test/03.png")
sharp_img.load()  # 对比度增强
print(sharp_img)
""" 你的 APPID AK SK """
# 这里就是在百度智能云中创建好的应用中的密钥,请自行添加
APP_ID = '' 
API_KEY = ''
SECRET_KEY = ''
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
i = open(r'D://test/03.png','rb') # 读取图片中的的文字、数字
img = i.read()
message = client.basicGeneral(img);
code = "";
# 循环保存读取出的文字
for i in message.get('words_result'):
    code +=  i.get('words')
# code = pytesseract.image_to_string(sharp_img).strip()
# 5、收到验证码,进行输入验证
print(code)
vcoda=driver.find_element_by_name('vcode')
vcoda.send_keys(code)
vcodavalue=pwd.get_attribute('vcode')
print(vcodavalue)
time.sleep(3)
from1=driver.find_element_by_id('tijiao')
from1.click()
url = "https://www.dotcpp.com" #登录成功后传跳到某个网址,这里如果不设置的话登陆成功会卡到此登录页面
driver.get(url)

2.需要做的准备

使用以上代码需要拥有以上的包、然后在代码内部需要自行添加自己的用户名和自己在百度智能云创建好的密钥,以及自己的图片路径(默认D盘的test文件下,如果没有会报错)

3.执行代码

执行代码,我用的是Pycharm
Python实现自动登录(有验证码)---c语言网_第5张图片
程序会自动的打开火狐浏览器,输入账号密码验证码,然后提交这里如果没有火狐浏览器可以自行下载,或者代码中改动driver = webdriver.**Firefox()**修改为自己拥有的浏览器,下面是最终截图
Python实现自动登录(有验证码)---c语言网_第6张图片


总结

代码也可以用其他的网址试试,其中在我测试的时候有几次没有登录成功,因为验证码没识别出来,这里有时候网站给出的验证码正常人也认不出,需要刷新验证码。
这里我的解决方案是在获取图片验证码时写一个while循环,刷新验证码重新读取验证码,验证码正确,转跳,否则再次循环。暂未实现,大家有兴趣可以完善完善代码。

参考文档

https://blog.csdn.net/weixin_38374974/article/details/80152899

你可能感兴趣的:(Python软件学习,百度,定位,python,selenium)