python+selenium實(shí)現(xiàn)登錄賬戶后自動(dòng)點(diǎn)擊的示例
公司在codereview的時(shí)候限制了看代碼的時(shí)間,實(shí)際上不少代碼屬于框架自動(dòng)生成,并不需要花費(fèi)太多時(shí)間看,為了達(dá)標(biāo),需要刷點(diǎn)時(shí)間(鼠標(biāo)點(diǎn)擊網(wǎng)頁固定區(qū)域)。我想到可以利用自動(dòng)化測試的手段完成這種無效的體力勞動(dòng)。
首先,明確一下需求:
- 自動(dòng)打開網(wǎng)頁
- 登陸賬號(hào)
- 每隔一定時(shí)間點(diǎn)擊一下固定區(qū)域
我想到的方案有兩個(gè),sikuli或者python+selenium。sikuli的優(yōu)點(diǎn)是邏輯操作簡單直接,使用圖片作為標(biāo)示,缺點(diǎn)是需要窗口固定,并且無法后臺(tái)運(yùn)行。selenium稍復(fù)雜一定,但是運(yùn)行速度快,窗口可以遮擋。
這里簡單記錄一下使用Python+selenium的小例子。
使用的版本為Python3.3以及selenium2,Windows環(huán)境(現(xiàn)在已經(jīng)支持3.0以上的了,多處論壇博客沒有更新)。
首先是軟件的安裝,Python不贅述了,記得設(shè)置環(huán)境變量。
下面安裝selenium,如果已經(jīng)安裝過pip。直接運(yùn)行一下命令。
pip install -U selenium
另一種方式,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gz下載并解壓。這里簡述一下windows版本,其實(shí)Unix下也差不多,使用Wget下載一下安裝。
使用命令(setup一般用于第三方模塊的安裝):
cd c:\Python3\xxxx python setup.py install
安裝過程中可能會(huì)出現(xiàn)ImportError: No module named setuptools,這是因?yàn)槿鄙賡etuptools模塊,Python默認(rèn)不安裝。
在http://pypi.python.org/pypi/setuptools上面提供了各系統(tǒng)的安裝包和安裝指南,對于Windows系統(tǒng),下載https://bootstrap.pypa.io/ez_setup.py自動(dòng)化安裝腳本。
運(yùn)行:
python ez_setup.py
完成后再安裝selenium即可。
這里用我自己的實(shí)例簡單的講解一下流程。
第一步先完成打開瀏覽器。
selenium2結(jié)合了selenium和webdriver,直接引入各個(gè)瀏覽器相應(yīng)的驅(qū)動(dòng),打開即可,注意chrome驅(qū)動(dòng)可能需要另行安裝。
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')
打開網(wǎng)頁后需要登錄,F(xiàn)12打開瀏覽器調(diào)試器,小箭頭選取元素,查看登錄框賬號(hào)和密碼的屬性,一般都有ID。selenium可以通過以下各個(gè)方法獲取元素并進(jìn)行各種操作,具體解釋請看上方鏈接文檔:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
其中id最為有效方便,優(yōu)先考慮。選取完元素之后可以通過WebDriver API調(diào)用模擬鍵盤的輸入和鼠標(biāo)的點(diǎn)擊操作。代碼如下:
username="qun"
passwd="passwd"
browser = webdriver.Firefox()
browser.get('https://www.xxx.com')
browser.implicitly_wait(10)
elem=browser.find_element_by_id("loginFormUserName")
elem.send_keys(username)
elem=browser.find_element_by_id("loginFormPassword")
elem.send_keys(passwd)
elem=browser.find_element_by_id("loginFormSubmit")
elem.click()
一般登錄之后頁面都會(huì)跳轉(zhuǎn)到新的網(wǎng)頁上,如何獲取新的網(wǎng)頁呢?這里有個(gè)窗口句柄的概念,通過切換窗口句柄來完成。注意!有時(shí)候元素在一個(gè)frame里面的時(shí)候,也需要通過swtich切換。這里出現(xiàn)一個(gè)wait函數(shù)(上面也有),是因?yàn)轫撁婕虞d需要時(shí)間,很可能在點(diǎn)擊之后元素才加載出來,下一節(jié)詳細(xì)解釋一下wait。
browser.implicitly_wait(10) browser.switch_to_window(browser.window_handles[-1])
之后選取需要點(diǎn)擊的區(qū)域,這里使用 xpath定位,因?yàn)樵谧詣?dòng)化測試的過程中,很有可能元素?zé)o法通過id,name等方法定位(不少人就是不寫,愛table套table,我也么辦法),xpath就有了用武之地。常用的偷懶方法是Firefox安裝xpath插件,右鍵直接獲取。這里不介紹,因?yàn)椴惶岢?,使用插件?huì)造成代碼里充斥這樣的東西:
XPath(/html/body/div/div[3]/div[2]/div[4]/p[2])
不到萬不得已,盡可能使用元素的特征來定位,比如按鈕的name。
或者通過父元素定位子元素。
username =browser.find_element_by_xpath("http://input[@name='username']")
clear_button = browser.find_element_by_xpath("http://form[@id='loginForm']/input[4]")
代碼如下,網(wǎng)上經(jīng)常出現(xiàn)的By的用法需要引入包。
from selenium.webdriver.common.by import By
這里使用另外一個(gè)函數(shù),我不知道有什么區(qū)別- -。
for i in range(100):
elem=WebDriverWait(browser, 30).until(
lambda x:x.find_element_by_xpath("http://table[@class='aaa']"/td[1]))
elem.click()
time.sleep(20)
print ("click",i)
然后這里還要提一下wait函數(shù),在selenium2中延遲等待分為兩種,顯示等待和隱式等待。
顯示等待
顯式等待,就是明確的要等到某個(gè)元素的出現(xiàn)或者是某個(gè)元素的可點(diǎn)擊等條件,等不到,就一直等,除非在規(guī)定的時(shí)間之內(nèi)都沒找到,那么就跳出Exception。
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
隱式等待
注意,隱式等待是告訴設(shè)置所有dom元素在尋找某個(gè)元素的時(shí)候,如果沒立即找到,再嘗試這么長時(shí)間。
browser.implicitly_wait(10) # seconds
兩者的區(qū)別在于一個(gè)是自己直接管理超時(shí)對象,一個(gè)是交給webdriver去做。
當(dāng)然也可以用休眠的方法干等。記得引入time包。
time.sleep(20)
這里只是簡單的演示一下用法,有許多可以改進(jìn)的地方,沒有封裝函數(shù),么有使用多線程并發(fā)執(zhí)行多個(gè)例程。以后有需求再改進(jìn)。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python+opencv+selenium自動(dòng)化登錄郵箱并解決滑動(dòng)驗(yàn)證的問題
- python爬蟲之利用selenium模塊自動(dòng)登錄CSDN
- Python如何基于selenium實(shí)現(xiàn)自動(dòng)登錄博客園
- Selenium+Python 自動(dòng)化操控登錄界面實(shí)例(有簡單驗(yàn)證碼圖片校驗(yàn))
- selenium+python實(shí)現(xiàn)自動(dòng)化登錄的方法
- Python使用selenium實(shí)現(xiàn)網(wǎng)頁用戶名 密碼 驗(yàn)證碼自動(dòng)登錄功能
- python內(nèi)置函數(shù)frozenset()的使用小結(jié)
- selenium+python實(shí)現(xiàn)自動(dòng)登錄腳本
- Python用selenium實(shí)現(xiàn)自動(dòng)登錄和下單的項(xiàng)目實(shí)戰(zhàn)
相關(guān)文章
Pycharm終端顯示PS而不顯示虛擬環(huán)境名的解決
這篇文章主要介紹了Pycharm終端顯示PS而不顯示虛擬環(huán)境名的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python讀取tif圖片時(shí)保留其16bit的編碼格式實(shí)例
今天小編就為大家分享一篇python讀取tif圖片時(shí)保留其16bit的編碼格式實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
使用Python實(shí)現(xiàn)圖像融合及加法運(yùn)算
這篇文章主要介紹了使用Python實(shí)現(xiàn)圖像融合及加法運(yùn)算,Python調(diào)用OpenCV實(shí)現(xiàn)圖像融合及加法運(yùn)算,包括三部分知識(shí):圖像融合、圖像加法運(yùn)算、圖像類型轉(zhuǎn)換,下文詳細(xì)內(nèi)容現(xiàn)需要的小伙伴可以參考一下2022-05-05
完美解決pycharm導(dǎo)入自己寫的py文件爆紅問題
今天小編就為大家分享一篇完美解決pycharm導(dǎo)入自己寫的py文件爆紅問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python+xlwings制作天氣預(yù)報(bào)表
python操作Excel的模塊,網(wǎng)上提到的模塊大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等。本文將利用xlwings模塊制作一個(gè)天氣預(yù)報(bào)表,需要的可以參考一下2022-01-01

