1. 程式人生 > 程式設計 >python中selenium庫的基本使用詳解

python中selenium庫的基本使用詳解

什麼是selenium

selenium 是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7,8,9,10,11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web應用程式測試系統,包含了測試的錄製(selenium IDE),編寫及執行(Selenium Remote Control)和測試的並行處理(Selenium Grid)。
Selenium的核心Selenium Core基於JsUnit,完全由JavaScript編寫,因此可以用於任何支援JavaScript的瀏覽器上。

selenium可以模擬真實瀏覽器,自動化測試工具,支援多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。

這裡要說一下比較重要的PhantomJS,PhantomJS是一個而基於WebKit的服務端JavaScript API,支援Web而不需要瀏覽器支援,其快速、原生支援各種Web標準:Dom處理,CSS選擇器,JSON等等。PhantomJS可以用用於頁面自動化、網路監測、網頁截圖,以及無介面測試

selenium的基本用法

宣告瀏覽器物件

上面我們知道了selenium支援很多的瀏覽器:

python中selenium庫的基本使用詳解

但是如果想要宣告並呼叫瀏覽器則需要:

from selenium import webdriver

browser = webdriver.Chrome()
browser = webdriver.Firefox()

這裡只寫了兩個例子,當然了其他的支援的瀏覽器都可以通過這種方式呼叫

訪問頁面

from selenium import webdriver#匯入庫
browser = webdriver.Chrome()#宣告瀏覽器
url = 'https:www.baidu.com'
browser.get(url)#開啟瀏覽器預設網址
print(browser.page_source)#列印網頁原始碼
browser.close()#關閉瀏覽器

上述程式碼執行後,會自動開啟Chrome瀏覽器,並登陸百度列印百度首頁的原始碼,然後關閉瀏覽器

查詢元素

單個元素查詢

from selenium import webdriver#匯入庫
browser = webdriver.Chrome()#宣告瀏覽器
url = 'https:www.taobao.com'
browser.get(url)#開啟瀏覽器預設網址
input_first = browser.find_element_by_id('q')
input_two = browser.find_element_by_css_selector('#q')
print(input_first)
print(input_two)

這裡我們通過2種不同的方式去獲取響應的元素,第一種是通過id的方式,第二個中是CSS選擇器,結果都是相同的。
輸出如下:

<selenium.webdriver.remote.webelement.WebElement (session="9aaa01da6545ba2013cc432bcb9abfda",element="0.5325244323105505-1")>
<selenium.webdriver.remote.webelement.WebElement (session="9aaa01da6545ba2013cc432bcb9abfda",element="0.5325244323105505-1")>

這裡列舉一下常用的查詢元素方法:

  • find_element_by_name
  • find_element_by_id
  • 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

下面這種方式是比較通用的一種方式:這裡需要記住By模組所以需要匯入

from selenium.webdriver.common.by import By

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://www.taobao.com'
browser.get(url)
input_1 = browser.find_element(By.ID,'q')
print(input_1)

當然這種方法和上述的方式是通用的,browser.find_element(By.ID,"q")這裡By.ID中的ID可以替換為其他幾個
我個人比較傾向於css

多個元素查詢

其實多個元素和單個元素的區別,舉個例子:find_elements,單個元素是find_element,其他使用上沒什麼區別,通過其中的一個例子演示:

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.taobao.com'
browser.get(url)
input = browser.find_elements_by_css_selector('.service-bd li')
print(input)
browser.close()

輸出為一個列表形式:

[<selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980",element="0.73211490098068-1")>,<selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980",element="0.73211490098068-2")>,element="0.73211490098068-3")>,element="0.73211490098068-4")>,element="0.73211490098068-5")>,element="0.73211490098068-6")>,element="0.73211490098068-7")>,element="0.73211490098068-8")>,element="0.73211490098068-9")>,element="0.73211490098068-10")>,element="0.73211490098068-11")>,element="0.73211490098068-12")>,element="0.73211490098068-13")>,element="0.73211490098068-14")>,element="0.73211490098068-15")>,element="0.73211490098068-16")>]

當然上面的方式也是可以通過匯入from selenium.webdriver.common.by import By 這種方式實現
lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
同樣的在單個元素中查詢的方法在多個元素查詢中同樣存在:

  • find_elements_by_name
  • find_elements_by_id
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

元素互動操作

對於獲取的元素呼叫互動方法

from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get(url='https://www.baidu.com')
time.sleep(2)
input = browser.find_element_by_css_selector('#kw')
input.send_keys('韓國女團')
time.sleep(2)
input.clear()
input.send_keys('後背搖')
button = browser.find_element_by_css_selector('#su')
button.click()
time.sleep(10)
browser.close()

執行的結果可以看出程式會自動開啟Chrome瀏覽器並開啟百度頁面輸入韓國女團,然後刪除,重新輸入後背搖,並點選搜尋
Selenium所有的api文件:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

互動動作

將動作附加到動作鏈中序列執行

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()

url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source,target)
actions.perform()

更多操作參考:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains

執行JavaScript

這是一個非常有用的方法,這裡就可以直接呼叫js方法來實現一些操作,
下面的例子是通過登入知乎然後通過js翻到頁面底部,並彈框提示

from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

python中selenium庫的基本使用詳解

獲取元素屬性

get_attribute('class')
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
logo = browser.find_element_by_css_selector('.zu-top-link-logo')
print(logo)
print(logo.get_attribute('class'))
print(logo.get_attribute('id'))
time.sleep(2)
browser.quit()

輸出如下:

<selenium.webdriver.remote.webelement.WebElement (session="b72dbd6906debbca7d0b49ab6e064d92",element="0.511689875475734-1")>
zu-top-link-logo
zh-top-link-logo

獲取文字值

text

from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
logo = browser.find_element_by_css_selector('.zu-top-link-logo')
print(logo)
print(logo.text)

輸出如下:

<selenium.webdriver.remote.webelement.WebElement (session="ce8814d69f8e1291c88ce6f76b6050a2",element="0.9868611170776878-1")>
知乎

獲取ID,位置,標籤名

id
location
tag_name
size

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.zhihu.com/explore'
browser.get(url)
input = browser.find_element_by_css_selector('.zu-top-add-question')
print(input.id)
print(input.location)
print(input.tag_name)
print(input.size)

輸出如下:

0.022998219885927318-1
{'x': 759,'y': 7}
button
{'height': 32,'width': 66}

到此這篇關於python中selenium庫的基本使用詳解的文章就介紹到這了,更多相關selenium 基本使用內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!