[此文章已過期]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()

庸了個白,才華與美貌集於一身

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