摘要:安裝的安裝就不再科普,自行百度。運(yùn)行這段代碼,你會(huì)發(fā)現(xiàn)自動(dòng)打開(kāi),并訪(fǎng)問(wèn)了百度,在輸入框輸入了,緊接著跳轉(zhuǎn)到了搜索的結(jié)果頁(yè)。
最近寫(xiě)項(xiàng)目的時(shí)候,用到了Selenium,一個(gè) Web 端的自動(dòng)化測(cè)試工具,直接運(yùn)行在瀏覽器中,用來(lái)模擬用戶(hù)操作。
Selenium 不僅僅可以用作自動(dòng)化測(cè)試,還有很多種玩法,比如 Python 的爬蟲(chóng),實(shí)現(xiàn)某商品的秒殺,甚至是頁(yè)游外掛腳本,只要是基于瀏覽器操作,只有你想不到,沒(méi)有 Selenium 做不到,就是這么強(qiáng)大!
直奔主題,我們來(lái)感受一下 Selenium。
安裝Python 的安裝就不再科普,自行百度。
通過(guò) pip 命令安裝 Selenium
pip install selenium安裝瀏覽器驅(qū)動(dòng)
Selenium 支持的瀏覽器很多,F(xiàn)irefox、Chrome、IE、Opera 等等。
作為一個(gè)程序員,想必大多常用的瀏覽器都是 Chrome,我的電腦是 Mac,安裝 Chrome 瀏覽器驅(qū)動(dòng),直接執(zhí)行 brew cask install chromedriver 即可。
更多 Selenium 瀏覽器驅(qū)動(dòng)下載,請(qǐng)點(diǎn)擊。
示例先來(lái)一段簡(jiǎn)單的代碼。
from selenium import webdriver from selenium.webdriver.common.keys import Keys browser = webdriver.Chrome() browser.get("https://www.baidu.com") browser.find_element_by_id("kw").send_keys("php") browser.find_element_by_id("kw").send_keys(Keys.ENTER)
運(yùn)行這段代碼,你會(huì)發(fā)現(xiàn)自動(dòng)打開(kāi) Chrome,并訪(fǎng)問(wèn)了百度,在輸入框輸入了 php,緊接著跳轉(zhuǎn)到了搜索的結(jié)果頁(yè)。
常用方法 1. 頁(yè)面元素定位Selenium 常用的元素定位方法
find_element_by_id()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_css_selector()
find_element_by_tag_name()
比如百度頁(yè)面的 HTML:
我們可以這樣定位
element = driver.find_element_by_id("kw") element = driver.find_element_by_class_name("s_ipt") element = driver.find_element_by_css_selector(".s_ipt")
獲取元素之后,就是針對(duì)于元素的操作了,簡(jiǎn)單可以劃分兩類(lèi)操作,鼠標(biāo)事件和鍵盤(pán)事件等等。
2. 鼠標(biāo)操作element.click() 單擊; element.context_click() 右擊; element.double_click() 雙擊; element.drag_and_drop() 拖動(dòng); element.move_to_element() 鼠標(biāo)懸停3. 輸入和鍵盤(pán)事件
輸入文本:
element.send_keys("Hello world")
鍵盤(pán)操作:
element.send_keys(Keys.ENTER) 回車(chē) element.send_keys(Keys.CONTROL,‘a(chǎn)’) 全選(Ctrl+A) element.send_keys(Keys.CONTROL,‘c’) 復(fù)制(Ctrl+C) element.send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X) element.send_keys(Keys.CONTROL,‘v’) 粘貼(Ctrl+V) element.send_keys(Keys.F1) 鍵盤(pán) F1 …… 等等窗口切換
driver.switch_to_window("windowName")
# 獲取所有打開(kāi)窗口句柄 all_handles = driver.window_handles # 獲取當(dāng)前窗口句柄 current_windows = driver.current_window_handle頁(yè)面等待
現(xiàn)在很多項(xiàng)目都是前后端分離的,HTML 動(dòng)態(tài)渲染,如果我們打開(kāi)某頁(yè)面,直接選取元素操作,就會(huì)拋出異常,所以設(shè)置頁(yè)面等待是很有必要的。
等待分為兩種類(lèi)型:顯式等待和隱式等待。
顯式等待: 針對(duì)頁(yè)面的某一元素,每隔一段時(shí)間檢測(cè)一次當(dāng)前頁(yè)面元素是否存在,如果超過(guò)設(shè)置時(shí)間檢測(cè)不到則拋出異常
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("http://www.baidu.com") element = WebDriverWait(driver, 5, 0.5).until( EC.presence_of_element_located((By.ID, "kw")) ) element.send_keys("selenium") driver.quit()
隱式等待: 并不針對(duì)頁(yè)面上的某一元素進(jìn)行等待,腳本執(zhí)行到某個(gè)元素定位時(shí),如果元素可以定位,則繼續(xù)執(zhí)行;如果元素定位不到,則它將以輪詢(xún)的方式不斷地判斷元素是否被定位,直到超出設(shè)置時(shí)長(zhǎng),拋出異常。
# 設(shè)置隱式等待為10秒 driver.implicitly_wait(10)
Selenium 還有更多的操作,比如設(shè)置瀏覽器 cookie、文件上傳、窗口截圖等待,這里就不多介紹了,有興趣的話(huà),大家可以去看擴(kuò)展閱讀。
女票再讓我?guī)退霘⑸唐罚僖膊挥蒙瞪档却址昼娪?Selenium 寫(xiě)個(gè)秒殺應(yīng)用有木有!:)
擴(kuò)展閱讀Selenium 教程
Selenium 官方 API
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/44737.html
摘要:注意,是叫做,不是。兩款瀏覽器同根同源,它們有著同樣的,但配色不同,由藍(lán)紅綠黃四種顏色組成,而由不同深度的藍(lán)色構(gòu)成。另外是基于的新特性實(shí)現(xiàn)的,所以它的一些執(zhí)行也支持異步操作,效率相對(duì)于來(lái)說(shuō)也提高了。是否響應(yīng)信號(hào),一般是命令,默認(rèn)是。 如果大家對(duì) Python 爬蟲(chóng)有所了解的話(huà),想必你應(yīng)該聽(tīng)說(shuō)過(guò) Selenium 這個(gè)庫(kù),這實(shí)際上是一個(gè)自動(dòng)化測(cè)試工具,現(xiàn)在已經(jīng)被廣泛用于網(wǎng)絡(luò)爬蟲(chóng)中來(lái)應(yīng)對(duì) ...
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:最近針對(duì)這個(gè)問(wèn)題看了不少了文章和書(shū)籍,在加上一點(diǎn)自己的思考和整理,與大家一起分享,一起學(xué)習(xí)。本文將以為例進(jìn)行說(shuō)明。這個(gè)值表示的是訪(fǎng)問(wèn)的。以為例可以看到,指令的部分包含了幾個(gè)組成部分請(qǐng)求方法。這一部分用來(lái)表示具體的指令。 作為一名使用Selenium開(kāi)發(fā)UI自動(dòng)化多年的工程師,一直都對(duì)Selenium Webdriver的實(shí)現(xiàn)原理感覺(jué)不是很清楚。怎么就通過(guò)腳本控制瀏覽器進(jìn)行各種操作了呢?...
摘要:前言最近接了一個(gè)爬蟲(chóng)的私活,收益頗豐。項(xiàng)目需求一個(gè)類(lèi)似百度文庫(kù)的網(wǎng)站,要求給出獲得文章,以形式保存下來(lái)。但是這次需要保存到這不難,難在要求格式不變。文章都是以許多標(biāo)簽組合在一起的。知情人請(qǐng)告知,感激不盡。 前言 最近接了一個(gè)爬蟲(chóng)的私活,收益頗豐。自認(rèn)為對(duì)爬蟲(chóng)掌握的還算不錯(cuò),爬過(guò)很多國(guó)內(nèi)外網(wǎng)站,數(shù)據(jù)超過(guò)百萬(wàn),應(yīng)對(duì)過(guò)封IP、設(shè)驗(yàn)證碼、假數(shù)據(jù)、強(qiáng)制登錄等反爬蟲(chóng)手段。于是乎,我毫不猶豫的接下了...
摘要:事實(shí)上,自動(dòng)化測(cè)試是相對(duì)于手動(dòng)的。減少人為的錯(cuò)誤自動(dòng)化測(cè)試是機(jī)器完成,不存在執(zhí)行過(guò)程中人為的疏忽和錯(cuò)誤,測(cè)試設(shè)計(jì)完全決定了測(cè)試的質(zhì)量,可以降低減少人為造成的錯(cuò)誤。而接口自動(dòng)化測(cè)試,主要是對(duì)接口進(jìn)行測(cè)試。 今年6月份,由于經(jīng)濟(jì)壓力讓我下定決心進(jìn)階自動(dòng)化測(cè)試,已經(jīng)24的我做了3年功能測(cè)試,坐標(biāo)廣...
閱讀 696·2023-04-25 19:53
閱讀 4283·2021-09-22 15:13
閱讀 2573·2019-08-30 10:56
閱讀 1327·2019-08-29 16:27
閱讀 2942·2019-08-29 14:00
閱讀 2418·2019-08-26 13:56
閱讀 440·2019-08-26 13:29
閱讀 1618·2019-08-26 11:31