是一個用於測試網站的自動化測試工具,支援各種瀏覽器包括Chrome、Firefox、Safari等主流介面瀏覽器,同時也支援phantomJS無介面瀏覽器。
在Windows命令提示字元(cmd)下輸入
pip install selenium
如果想使用selenium驅動不同的瀏覽器,必須單獨下載並設定不同的瀏覽器驅動。
我用的是Firefox瀏覽器驅動: geckodriver
(1)選擇合適的驅動程式,下載完成後將其解壓,開啓解壓之後的檔案
(2)查詢Python的安裝目錄,將準備好的geckodriver.exe檔案放到這個目錄下
專案 | Value |
---|---|
find_element_by_id() | 通過元素id定位 |
find_element_by_name() | 通過元素name定位 |
find_element_by_xpath | 通過xpath表達式定位 |
find_element_by_class_name() | 通過類名定位 |
find_element_by_link_text() | 通過完整超鏈接定位 |
find_element_by_partial_link_text() | 通過部分鏈接定位 |
find_element_by_tag_name | 通過標籤定位 |
find_element_by_css_selector() | 通過css選擇器定位 |
假如我們有一個Web頁面,通過前端工具(如,Firebug)檢視到一個元素的屬性是這樣的。
<html>
<head>
<body link="#0000cc">
<a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
<form id="form" class="fm" name="f" action="/s">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
我們的目的是要定位input標籤的輸入框。
通過id定位:
dr.find_element_by_id("kw")
通過name定位:
dr.find_element_by_name("wd")
通過class name定位:
dr.find_element_by_class_name("s_ipt")
通過tag name定位:
dr.find_element_by_tag_name("input")
通過xpath定位,xpath定位有N種寫法,這裏列幾個常用寫法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
通過css定位,css定位有N種寫法,這裏列幾個常用寫法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
from selenium import webdriver #匯入Selenium WebDriver模組
driver = webdriver.Firefox() #新建物件並啓動瀏覽器
driver.get("https://www.baidu.com") #呼叫get方法開啓一個網頁
driver.find_element_by_id("kw").clear() #通過clear方法來清理文字
driver.find_element_by_id("kw").send_keys("selenium") #輸入文字內容
driver.find_element_by_id("su").click() #進行單擊操作
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
size = driver.find_element_by_id('kw').size
print(size) #獲取百度輸入框的寬、高
text = driver.find_element_by_id("bottom_layer").text
print(text) #獲取百度底部的備案資訊
attribute = driver.find_element_by_id("kw").get_attribute('type')
print(attribute) #獲取百度輸入的type屬性的值
result = driver.find_element_by_id("kw").is_displayed()
print(result) #返回元素是否可見
driver.quit()