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