什么是selenium
selenium 是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web應(yīng)用程序測(cè)試系統(tǒng),包含了測(cè)試的錄制(selenium IDE),編寫及運(yùn)行(Selenium Remote Control)和測(cè)試的并行處理(Selenium Grid)。
Selenium的核心Selenium Core基于JsUnit,完全由JavaScript編寫,因此可以用于任何支持JavaScript的瀏覽器上。
selenium可以模擬真實(shí)瀏覽器,自動(dòng)化測(cè)試工具,支持多種瀏覽器,爬蟲中主要用來解決JavaScript渲染問題。
這里要說一下比較重要的PhantomJS,PhantomJS是一個(gè)而基于WebKit的服務(wù)端JavaScript API,支持Web而不需要瀏覽器支持,其快速、原生支持各種Web標(biāo)準(zhǔn):Dom處理,CSS選擇器,JSON等等。PhantomJS可以用用于頁面自動(dòng)化、網(wǎng)絡(luò)監(jiān)測(cè)、網(wǎng)頁截屏,以及無界面測(cè)試
selenium的基本用法
聲明瀏覽器對(duì)象
上面我們知道了selenium支持很多的瀏覽器:
但是如果想要聲明并調(diào)用瀏覽器則需要:
1
2
3
4
|
from selenium import webdriver browser = webdriver.Chrome() browser = webdriver.Firefox() |
這里只寫了兩個(gè)例子,當(dāng)然了其他的支持的瀏覽器都可以通過這種方式調(diào)用
訪問頁面
1
2
3
4
5
6
|
from selenium import webdriver #導(dǎo)入庫 browser = webdriver.Chrome() #聲明瀏覽器 url = 'https:www.baidu.com' browser.get(url) #打開瀏覽器預(yù)設(shè)網(wǎng)址 print (browser.page_source) #打印網(wǎng)頁源代碼 browser.close() #關(guān)閉瀏覽器 |
上述代碼運(yùn)行后,會(huì)自動(dòng)打開Chrome瀏覽器,并登陸百度打印百度首頁的源代碼,然后關(guān)閉瀏覽器
查找元素
單個(gè)元素查找
1
2
3
4
5
6
7
8
|
from selenium import webdriver #導(dǎo)入庫 browser = webdriver.Chrome() #聲明瀏覽器 url = 'https:www.taobao.com' browser.get(url) #打開瀏覽器預(yù)設(shè)網(wǎng)址 input_first = browser.find_element_by_id( 'q' ) input_two = browser.find_element_by_css_selector( '#q' ) print (input_first) print (input_two) |
這里我們通過2種不同的方式去獲取響應(yīng)的元素,第一種是通過id的方式,第二個(gè)中是CSS選擇器,結(jié)果都是相同的。
輸出如下:
1
2
|
< 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模塊所以需要導(dǎo)入
1
2
3
4
5
6
7
8
9
10
|
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) |
當(dāng)然這種方法和上述的方式是通用的,browser.find_element(By.ID,"q")這里By.ID中的ID可以替換為其他幾個(gè)
我個(gè)人比較傾向于css
多個(gè)元素查找
其實(shí)多個(gè)元素和單個(gè)元素的區(qū)別,舉個(gè)例子:find_elements,單個(gè)元素是find_element,其他使用上沒什么區(qū)別,通過其中的一個(gè)例子演示:
1
2
3
4
5
6
7
8
|
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() |
輸出為一個(gè)列表形式:
[<selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-1")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-2")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-3")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-4")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-5")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-6")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-7")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-8")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-9")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-10")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-11")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-12")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-13")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-14")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-15")>, <selenium.webdriver.remote.webelement.WebElement (session="42d192ca36f75170ab489e4839df0980", element="0.73211490098068-16")>]
當(dāng)然上面的方式也是可以通過導(dǎo)入from selenium.webdriver.common.by import By 這種方式實(shí)現(xiàn)
lis = browser.find_elements(By.CSS_SELECTOR,'.service-bd li')
同樣的在單個(gè)元素中查找的方法在多個(gè)元素查找中同樣存在:
- 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
元素交互操作
對(duì)于獲取的元素調(diào)用交互方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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( '韓國女團(tuán)' ) time.sleep( 2 ) input .clear() input .send_keys( '后背搖' ) button = browser.find_element_by_css_selector( '#su' ) button.click() time.sleep( 10 ) browser.close() |
運(yùn)行的結(jié)果可以看出程序會(huì)自動(dòng)打開Chrome瀏覽器并打開百度頁面輸入韓國女團(tuán),然后刪除,重新輸入后背搖,并點(diǎn)擊搜索
Selenium所有的api文檔:http://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.action_chains
交互動(dòng)作
將動(dòng)作附加到動(dòng)作鏈中串行執(zhí)行
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
執(zhí)行JavaScript
這是一個(gè)非常有用的方法,這里就可以直接調(diào)用js方法來實(shí)現(xiàn)一些操作,
下面的例子是通過登錄知乎然后通過js翻到頁面底部,并彈框提示
1
2
3
4
5
|
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")' ) |
獲取元素屬性
1
2
3
4
5
6
7
8
9
10
11
|
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
1
2
3
4
5
6
|
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,位置,標(biāo)簽名
id
location
tag_name
size
1
2
3
4
5
6
7
8
9
10
|
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}
到此這篇關(guān)于python中selenium庫的基本使用詳解的文章就介紹到這了,更多相關(guān)selenium 基本使用內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.jianshu.com/p/3aa45532e179