學習Python/ target=_blank class=infotextkey>Python的初衷是因為它的實踐的便捷性,幾乎計算機上能完成的各種操作都能在Python上找到解決途徑。平時工作需要在線學習。而在線學習的復雜性經常讓人抓狂。費時費力且效率很低,而讓Python這個不知疲倦、不怕麻煩與辛苦、不會抱怨的助手去搞定主人想做的一切。自己泡杯咖啡愜意的學習才是我輩的終極目標。
一、完成功能的條件
1.必備條件
- 安裝Python環境(https://www.python.org/)
- 安裝Selenium
- 安裝使用的對應版本瀏覽器驅動(webdriver)
2.非必備條件
- 安裝PyCharm集成環境
二、解決Python軟件的坑
1.安裝Python
打勾的地方一定要加上,默認方式是不選的,這將影響到命令行運行python相關命令是否能正確執行。
2.安裝Selenium
這個安裝其實真的簡單,沒必要再去糾結怎么下載,怎么安裝了。直接在操作系統里進入命令行界面,執行一下:
pip install selenium
3.下載并安裝Chrome驅動
這是真真正正的坑,有的人使用時以為自己已經安裝過Chrome瀏覽器就以為直接可以用Python驅動了,其實不然,還得有Chrome對應版本的驅動才行。
下載網址:http://npm.taobao.org/mirrors/chromedriver
是不是一下閃瞎了你的眼睛,這么多,那個才適合我呢?
你需要首先看一下你的Chrome版本哦,對應版本的驅動才能用的。
趕緊在瀏覽器中輸入下面的代碼看一下版本吧!
chrome://version/
相信大家的版本跟我的都不一樣,我的是32位版本哦!為什么不用64位版本呢?網上能下的大部分都是64位版的呢。你在Chrome的驅動里找一找,驅動for Win基本都是32哦。所以還是趕緊換掉你的瀏覽器吧。這里正確的做法是在網上找32位的Chrome,然后對應著看一下是否有對應的驅動,如果兩個都有,那就趕緊下載吧。
下載好的驅動文件名:chromedriver.exe,為了減少配置的麻煩,應該把這個文件放置在Python安裝文件夾中。如果不會,可以右擊開始菜單中的:Python菜單 》【屬性】》【打開文件位置】然后直接粘貼即可。
二、萬事具備、準備開工了
不管你是善長使用PyCharm還是使用Python自帶的IDLE,反正結果都一樣。
1.驅動Chrome ,讓它訪問我們需要的網站吧:
下面的代碼將自動打開Chrome 瀏覽器,并且最大化,然后自動打開要訪問的網站。
from selenium import webdriver
from time import sleep
driver=webdriver.Chrome()
driver.maximize_window()
# 網站地址請修改后使用
driver.get("https://XXXX.XXXXXXX.cn/welcome/")
在瀏覽器中按F12功能鍵,進入開發者模式:選擇:Elements,按【Ctrl+F】進行查找:找【用戶登錄】,可以定位到對應的div標簽,class是signIn,這里是通過單擊這個div進入下一個頁面的。
上代碼:
sleep(3)
driver.find_element_by_class_name("signIn").click()
全部代碼重新執行后,將自動在Chrome新標簽頁上打開【登錄】頁
這里有三個操作點,需要我們自動定位并輸入用戶名和密碼,然后單擊【登錄】按鈕。同時因為【登錄】是單獨的新的標簽頁,這也增加了操作的難度。同樣F12進開發者模式,分別查找:【用戶名】、【請輸入密碼】來確定兩個輸入框
【登錄】按鈕這里用查找方式居然找不到,單擊開發者模式左上角的【選擇】按鈕,單擊一下【登錄】位置能夠自動確定
這個【登錄】是在標記里面,其實是里顯示的文本。所以選擇到button,基本就成功了。處理的代碼如下:
# 切換到新標簽頁的代碼
handles = driver.window_handles
for handle in handles:
if driver.current_window_handle != handle:
driver.switch_to.window(handle)
sleep(2)
# 找到用戶名框并單擊定位
driver.find_element_by_id("username").click()
sleep(2)
# 模擬鍵盤在用戶名框輸入用戶名
driver.find_element_by_id("username").send_keys('327XXXX9880212XXXX')
sleep(2)
# 定位到密碼框單擊
driver.find_element_by_id('password').click()
# 模擬輸入密碼
driver.find_element_by_id('password').send_keys('12345678')
sleep(1)
# 定位到登錄按鈕并單擊
driver.find_element_by_tag_name('button').click()
2.對于比較復雜的class選擇器
比如:
<button type="button" class="ant-btn ant-btn-link role-card-btn"><span>進入工作臺</span></button>
如果頁面中有多個button,就不太好使用button這個tag的情況下,可以使用
driver.find_element_by_css_selector("[class='ant-btn ant-btn-link role-card-btn']").click()
3.對于用戶名和密碼,可以使用文件讀寫方式處理
f=open('user.txt','r')
driver.find_element_by_id("username").click()
driver.find_element_by_id("username").send_keys(f.readline().strip('rn'))
driver.find_element_by_id('password').click()
driver.find_element_by_id('password').send_keys(f.readline().strip('rn'))
user.txt的文件格式:
327XXXX9880212XXXX
12345678
3.對于多個視頻文件的處理,一般使用
# 獲取到多個元素的情,類似于數組,通過下標方式來操作每個元素
sipin= driver.find_elements_by_css_selector("[class='XX-YY_ZZ']")
sipin[0].click()
sleep(60*時間)
sipin[1].click()
4.關閉瀏覽器的操作(兩個操作可選)
# 關閉當前窗體
driver.close()
# 關閉整個瀏覽器
driver.quit()