[此文章已过期]selenium+百度api 简单解决广邮登录与实习日志提交

selenium+百度api 简单解决广邮登录与实习日志提交

因为懒,我的实习日志只是每天登录+复制粘贴就行了,但是每天都是重复干同一件事就想着能不能更懒,每天只要点一下鼠标就完事,于是这篇文章诞生了。
(其实以前吧,还写过批量提交、智能生成等…但是后面觉得太嚣张+学校网站改成了只能提交当天日志,当天就当天吧)

环境的介绍

python 随便下个3.x版本
selenium python的一个库,在控制台输入安装pip install selenium
webdriver 浏览器驱动,不同浏览器对应不同的驱动,我用的是Chrome,就下载chrome的驱动,点击选择版本下载
下载的 webdriver 是一个压缩包,将其解压加入全局路径(mac版不需要),为了省事,我直接把 webdriver 放到了 python 同级目录(因为python在安装时加入了全局路径),如果不加入全局路径会出错就是了。
百度api 就是一个库, 安装就完事了 pip install baidu-aip
图片1

从这里开始吧

第一步,登录页面

准备好登录页面的 url http://219.137.26.162:83/sxoa/
直接用 selenium 操控chrome访问过去

from selenium import webdriver

login_url = 'http://219.137.26.162:83/sxoa/'    # 登录网址
browser = webdriver.Chrome()    # 启动浏览器
browser.get(login_url)  # 访问

运行代码可以来到如下页面,可以看到登录步骤只需填写账号、密码、验证码再点击登录即可。
图片2在这里插入图片描述
用代码让浏览器帮我们填入账号、密码。selenium 提供了很多种办法找到你需要填入信息的元素,选择其中一种即可,这里选择的是by_id。
在这里插入图片描述
本文的代码是从上一片代码逐渐往下增加

txtID = browser.find_element_by_id('txtID')     # 账号
txtPwd = browser.find_element_by_id('txtPwd')   # 密码
txtID.send_keys('你的账号')     # 填写账号
txtPwd.send_keys('你的密码')    # 填写密码

好好写上你的学号密码,还差一个验证码,因为学校的验证码比较简单,交给百度进行识别能达到80%以上的准确率。行下面开始随便了解了解百度的api。

1.百度云的登录页面,自己注册个百度账号进去
https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2Fai%2F%3Ffromai%3D1#/ai/imagerecognition/overview/index

2.创建应用,创建的时候记得勾选上通用文字识别(这个非常重要,很多人在这里错了找不到答案),不然会显示No permission to access data… 创建好之后可以在应用列表查看一些key,id等的信息。这些东西在后面写代码进行引用百度api的时候用到。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.写代码

from aip import AipOcr

AppID = '上文提到的appid'
API_Key = '这里填 Api Key'
Secret_Key = '这里填 Secret Key'
# 创建客户端,即连接百度服务
client = AipOcr(AppID, API_Key, Secret_Key)
# 验证码 url
img_url = 'http://219.137.26.162:83/sxoa/images/check.jpg'
# 远程文字识别
result = client.basicGeneralUrl(img_url)

谈一下 img_url ,因为Chrome进去的时候就获取了验证码,所以再次访问的时候服务器根据你的 cookie 给你图片,也就是直接访问图片地址与登录页面的验证码其实是同一个,直接把地址给百度就好了。
得到的 result 是一个字典,只要把其中的 words 提取出来即可,有时候识别不准确,要是有空可以用 try 识别到正确再登录,因为我懒本文就不做验证码错误的处理了,如果直接拿下文的完整代码,错了就重新运行代码吧。

这个是 result 的格式参考,非代码,非代码
{'log_id': 6901985564077557840, 'words_result_num': 1, 'words_result': [{'words': 'ZHBJ'}]}

接着往下写登录的代码,选择到登录的按钮,再执行 selenium 提供的 click() 函数

# 验证码输入
txtCode = browser.find_element_by_id('txtCode')
txtCode.send_keys(result['words_result'][0]['words'])
# 登录
submit = browser.find_element_by_id('btnSubmit')
submit.click()

第二步,写日志

此时登录成功,到了首页。直接跳转到写日志界面,如果不知道url的自己用浏览器开发者工具抓一下包。
在这里插入图片描述
在这里插入图片描述
从上图可以看到我们需要跳转的 url 后有一个参数date,这其实是当天日期,用内置 datetime 库在 date 上补上当天日期就开始跳转吧

import datetime

# 今天日期
today = str(datetime.date.today())
# 写日志 url
daily_url = 'http://219.137.26.162:83/SXOA/Daily_Record/daily_record_add.aspx?date={}'.format(today)
# 跳转
browser.get(daily_url)

跳转成功到达以下页面,可以看到已经自动为我们填上了姓名和日期,因为上一步已经在 date 后面加了时间的参数。实际上需要操控浏览器填上的信息有三个,标题、地点、工作内容。
在这里插入图片描述
接下来的操作和登录页面一样,通过 id 选择到元素,再输入提交即可。

txtDRTitle = browser.find_element_by_id('txtDRTitle')   # 标题
txtDRAddr = browser.find_element_by_id('txtDRAddr')     # 地点
txtDRContent = browser.find_element_by_id('txtDRContent')   # 内容
daily_submit = browser.find_element_by_id('btn')   # 提交按钮

# 发送
txtDRTitle.send_keys('{}日志'.format(today))
txtDRAddr.send_keys('广州')
txtDRContent.send_keys('今天也是充满希望的一天')
# 提交
daily_submit.click()

到此就完事了,设置好内容,每天点一下就完了,如果你点都不想点,那行,百度一下每日到点自动运行即可。
在这里插入图片描述

完整代码

from selenium import webdriver
from aip import AipOcr
import datetime

							'''登录部分'''
login_url = 'http://219.137.26.162:83/sxoa/'    # 登录网址
browser = webdriver.Chrome()    # 启动浏览器
browser.get(login_url)  # 访问

txtID = browser.find_element_by_id('txtID')     # 账号
txtPwd = browser.find_element_by_id('txtPwd')   # 密码
txtID.send_keys('你的账号')     # 填写账号
txtPwd.send_keys('你的密码')    # 填写密码

# 百度验证码识别
AppID = '你的 APP ID'
API_Key = '你的 API key'
Secret_Key = '你的 Secret key'
# 创建客户端,即连接百度服务
client = AipOcr(AppID, API_Key, Secret_Key)
# 验证码 url
img_url = 'http://219.137.26.162:83/sxoa/images/check.jpg'
# 远程文字识别
result = client.basicGeneralUrl(img_url)
# 验证码输入
txtCode = browser.find_element_by_id('txtCode')
txtCode.send_keys(result['words_result'][0]['words'])
# 登录
submit = browser.find_element_by_id('btnSubmit')
submit.click()
							'''首页部分'''
# 今天日期
today = str(datetime.date.today())
# 写日志 url
daily_url = 'http://219.137.26.162:83/SXOA/Daily_Record/daily_record_add.aspx?date={}'.format(today)
# 跳转
browser.get(daily_url)
txtDRTitle = browser.find_element_by_id('txtDRTitle')   # 标题
txtDRAddr = browser.find_element_by_id('txtDRAddr')     # 地点
txtDRContent = browser.find_element_by_id('txtDRContent')   # 内容
daily_submit = browser.find_element_by_id('btn')   # 提交按钮
# 发送
txtDRTitle.send_keys('{}日志'.format(today))
txtDRAddr.send_keys('广州')
txtDRContent.send_keys('今天也是充满希望的一天')
# 提交
daily_submit.click()

庸了个白,才华与美貌集于一身

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章