Python+selenium實現Drcom校園網自動檢測網路以及自動登入
前言
因為很多工作和軟體都在實驗室的電腦裡面,很多時候在外面需要利用遠端軟體來控制這臺電腦。但是學校的校園網在長時間不工作時經常性的斷開,每次都需要在群裡@大佬幫忙連線網路,很麻煩。因此想到可以設定自動檢測登入的指令碼解決這個問題,在舍友的建議下找到了這個方法,非常感謝。
此指令碼理論上所有校園網網頁都可以執行。
下載:https://github.com/ken-arch/drcom-
環境
1、作業系統:Win10 專業版
2、程式語言:python 3.7 (anaconda)
3、依賴包:selenium
4、瀏覽器:Chrome
詳細步驟
1、python下載配置就不細講了,直接下載anaconda安裝就行,然後我用的是Jupyter notebook(anaconda裡有)來編寫Python指令碼。
2、安裝selenium,也很簡單,直接win+R輸入cmd進入命令列,然後輸入:
pip install selenium
3、安裝webdriver:
3.1、 Chrome:http://chromedriver.storage.googleapis.com/index.html
需要注意的是:webdriver需要和對應的瀏覽器版本以及selenium版本對應
這裡由於webdriver需要和selenium的版本對應,因此需要將Chrome的自動更新禁用,不然到時候Chrome更新版本導致你的webdriver版本跟不上,指令碼就失效了。
可參考:https://www.cnblogs.com/jinanxiaolaohu/p/10605034.html
3.2、 webdriver 安裝路徑
壓縮包解壓後,將exe檔案複製到Python 安裝目錄下即可。
python安裝路徑就是anaconda的安裝路徑,實在找不到可以在命令列輸入:
Python
import sys
sys.path
就可以找到了。
4、寫python指令碼
1、在jupyter notebook 新建一個notebook
2、判斷網路連線情況
首先:我們需要判斷網路是否斷開,如果斷開則進行登入操作,否則就什麼都不用做。
剛開始,外面可以使用os.systerm庫函式,直接呼叫系統函式,如:
import os
def test_net():
#檢查網路是否聯通
res = os.system('ping 8.8.8.8')
if res:#如果返回1代表網路連線失敗
Login()
else:#如果返回0代表網路連線成功
print('ping ok')
這裡就相當於在命令列輸入’ping 8.8.8.8’。
雖然上面的函式可行,但是每次執行都會開啟命令列,很不方便。因此使用下面的函式。
from subprocess import run
def test_net():
#檢查網路是否聯通,利用此函式將不會主動彈出命令列視窗
#shell是True,則將通過shell執行指定的命令。
res = run('ping 8.8.8.8',shell=True)
if res.returncode:
Login()
else:
print('ping ok')
3、編寫自動登入指令碼
3.1、普通方式啟動
第一步,先匯入selenium庫檔案,import webdriver。然後初始化url,賬號密碼。
from selenium import webdriver
def Login():
# 開啟谷歌瀏覽器
driver = webdriver.Chrome()
url = "https://drcom.szu.edu.cn/a70.htm" #登入網址
Name = "name" #賬號
Password = "****" #密碼
第二步,訪問url。通過檢查元素找到對應賬號密碼的id(當然還有可以用name,xpath等來定位)。
xpath定位方法可參考:https://www.cnblogs.com/chenshaoping/p/5540434.html
# 訪問網址
driver.get(url)
driver.implicitly_wait(20) # 隱性等待,最長等20秒
# 輸入賬號
driver.find_element_by_id("VipDefaultAccount").send_keys(Name)
# 輸入密碼
driver.find_element_by_id("VipDefaultPassword").send_keys(Password)
# 點選登入按鈕
driver.find_element_by_xpath("//*[@name='f1']/div[@id='btn']/input[@id='login']").click()
driver.quit()
其中,在定位登入按鈕時,先前一直用對應的id來定位,但一直失效。經過檢查原始碼,發現按鈕對應的id 不是唯一的,因此出現定位錯誤的問題,之後改用xpath方法定位該元素。如下圖id="login"出現了衝突。
此外,網址載入速度不一樣,要是再網址還沒載入完就尋找對應元素,就會找不到。所以加上了隱性等待條件,
driver.implicitly_wait(20) # 隱性等待,最長等20秒
當頁面全部載入完成後就可以繼續下一步,不然就最多等待20秒。
3.2、Headless方式啟動
上面訪問瀏覽器的方法會將瀏覽器開啟來,再關閉。我們可以使用另外一種方法,不用真正的開啟瀏覽器,也可以支援執行指令碼。
chrome_options = webdriver.ChromeOptions()
# 使用headless無介面瀏覽器模式
chrome_options.add_argument('--headless') #增加無介面選項
chrome_options.add_argument('--disable-gpu') #如果不加這個選項,有時定位會出現問題
# 開啟谷歌瀏覽器
driver = webdriver.Chrome(chrome_options=chrome_options)
3.3、完整程式碼
Drcom_login.1.2.ipynb
from selenium import webdriver
from subprocess import run
def Login():
chrome_options = webdriver.ChromeOptions()
# 使用headless無介面瀏覽器模式
chrome_options.add_argument('--headless') #增加無介面選項
chrome_options.add_argument('--disable-gpu') #如果不加這個選項,有時定位會出現問題
# 開啟谷歌瀏覽器
driver = webdriver.Chrome(chrome_options=chrome_options)
url = "https://drcom.szu.edu.cn/a70.htm" #登入網址
Name = "name" #賬號
Password = "****" #密碼
# 訪問網址
driver.get(url)
driver.implicitly_wait(20) # 隱性等待,最長等20秒
# 輸入賬號
driver.find_element_by_id("VipDefaultAccount").send_keys(Name)
# 輸入密碼
driver.find_element_by_id("VipDefaultPassword").send_keys(Password)
# 點選登入按鈕
driver.find_element_by_xpath("//*[@name='f1']/div[@id='btn']/input[@id='login']").click()
driver.quit()
def test_net():
#檢查網路是否聯通,利用此函式將不會主動彈出命令列視窗
res = run('ping 8.8.8.8',shell=True)
if res.returncode:
Login()
else:
print('ping ok')
if __name__ == "__main__":
test_net()
4、自動化執行指令碼
4.1、匯出指令碼
點選jupyter notebook 左上角的File, 將ipynb檔案下載為py檔案。
4.1、新建drcom_test.bat檔案
cd [py指令碼的下載路徑]
python Drcom_login_1.2.py
儲存後,雙擊試一下是否可以執行。若成功,接下來就要將此指令碼加入到計算機任務中,實現定時執行的自動化過程。
4.1、計算機任務管理
-
右鍵我的電腦-》管理
-
系統工具-》任務管理程式-》建立任務
-
新建觸發器,按照自己需求來設定。
-
新建操作,將bat檔案匯入
-
其他設定,安裝需求來就行了。
對於等待空閒時間的理解,有一個回答得比較好的,我認為應該有所幫助。
http://ask.zol.com.cn/x/4506197.html
相關文章
- python爬蟲(四)——selenium校園網自動填報Python爬蟲
- python+selenium實現自動搶票Python
- 校園網-真實的校園網路社群
- Selenium使用Cookie實現自動登入Cookie
- 在公司內部網路如何搭建Python+selenium自動化測試環境Python
- Python自動登入QQ的實現示例Python
- 自動化驗證碼登入如何實現?
- 基於DotNetty實現自動釋出 - 自動檢測程式碼變化Netty
- 自動登入方案
- 網路網賭注單自動檢測不給提款有什麼辦法?
- Chrome實現自動化測試:錄製回放網頁動作Chrome網頁
- 登入華科校園網,我用Socket
- Python 實現斷網自動重連Python
- SharedPreferences實現記住密碼----自動登入功能密碼
- 通過自動化和現代化實現網路優化優化
- php實現自動化執行環境檢測PHP
- 基於信創運維平臺,實現國產化網路自動巡檢運維
- 搜狗2012校園招聘自測題
- 用python登入WeChat 實現自動回覆(非常詳細)Python
- linux 實現開機自動登陸Linux
- WDS+MDT網路啟動自動部署windows(十六)計算機自動進入指定OUWindows計算機
- 從網路工程師的角度看網路自動化的現狀工程師
- 自智網路,意圖驅動?
- [javascript]如何優雅的實現網頁自動滾動JavaScript網頁
- Selenium自動化測試網頁網頁
- php 自動類載入類 composer.json 實現自動載入PHPJSON
- ssh安全的自動登入
- windows主機批處理命令檢查網路卡網路自動重啟網路卡Windows
- 「實用」微信掃碼 - 關注公眾號後網站自動登入網站
- 自動化測試新視角:以SaaS模式檢測內網安全模式內網
- CentOS自動開啟網路連線CentOS
- 資料模型與網路自動化模型
- 【自動化測試入門】自動化測試思維
- 校園門戶登入
- JS+PHP實現登入後自動執行之前的操作JSPHP
- iOS 實現自動登入(從低階做法到高階做法)iOS
- 使用 Forth 實現驗證碼識別與自動化登入
- 使用 Crystal 實現驗證碼識別與自動化登入