一、基礎(chǔ)認(rèn)識(shí)
1、解釋
Selenium是一套Web網(wǎng)站的程序自動(dòng)化操作解決方案(比如點(diǎn)擊界面按鈕,在文本框中輸入文字等操作)
2、流程
Selenium的自動(dòng)化原理如下
3、安裝庫(kù)
3.1 下載selenium庫(kù)的命令
pip install selenium
3.2 下載谷歌瀏覽器Chrome對(duì)應(yīng)的驅(qū)動(dòng)
驅(qū)動(dòng)庫(kù)網(wǎng)址:http://chromedriver.storage.googleapis.com/index.html
注意:根據(jù)自己的Chrome版本進(jìn)行選擇
由于我的是103版的,那么就選103版的驅(qū)動(dòng)進(jìn)行下載,只要版本(比如開頭的103)一樣,后面的數(shù)字比如0.5060.114啥的不會(huì)造成什么影響。
3.3 樣例
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
#創(chuàng)建webDriver對(duì)象,指明使用chrome瀏覽器驅(qū)動(dòng)
wd = webdriver.Chrome(service=Service(r'D:\chromedriver_win32\chromedriver.exe'))
#隱式等待,防止程序過(guò)快而網(wǎng)頁(yè)反應(yīng)不過(guò)來(lái)(10s)
wd.implicitly_wait(10)
#調(diào)用webDriver 對(duì)象的get方法,可以讓瀏覽器打開指定網(wǎng)址
wd.get('http://www.baidu.com/')
注意:service里的路徑’D:\chromedriver_win32\chromedriver.exe’也可以在電腦系統(tǒng)的環(huán)境變量中來(lái)配,之后直接調(diào)用即可,細(xì)節(jié)就不展開了,可以自行搜索。
4、implicitly_wait和time.sleep
wd.implicitly_wait(10)是指當(dāng)找不到元素的時(shí)候才會(huì)等,如果找到了就不會(huì)等。每次調(diào)用find_element或find_elements都會(huì)判斷,因此當(dāng)能找到時(shí),就用time.sleep(1)來(lái)控制時(shí)間間隔。
二、元素的選擇
1、通過(guò)id來(lái)選擇對(duì)應(yīng)元素
1.1 解釋
id屬性是唯一的,所以如果元素有id,則根據(jù)id選擇元素是最簡(jiǎn)單高效的方式。
1.2 樣例
#根據(jù)id選擇元素,返回的就是該元素對(duì)應(yīng)的WebElement對(duì)象
element = wd.find_element(By.ID, 'kw')
#通過(guò)該WebElement對(duì)象,就可以對(duì)頁(yè)面元素進(jìn)行操作
#比如輸入字符串到這個(gè)輸入框里
element.send_keys('水果\n')
#輸出當(dāng)前窗口的標(biāo)題欄
print(wd.title)
#關(guān)閉頁(yè)面退出
#wd.close()
2、根據(jù)class屬性、tag名選擇元素
2.1 相關(guān)方法
2.1.1 find_elements
使用find_elements選擇的是符合條件的所有元素,如果沒(méi)有符合條件的元素,返回空列表
2.1.2 find_elements
使用find_element選擇的是符合條件的第一個(gè)元素,如果沒(méi)有符合條件的元素,拋出異常
2.2 根據(jù)屬性名(class_name)來(lái)選擇元素
# 根據(jù)class name 選擇元素,返回的是一個(gè)列表
# 里面都是class屬性值為animal的元素對(duì)應(yīng)的WebElement對(duì)象
elements = wd.find_elements(By.CLASS_NAME, 'animal')
print(elements)
2.3 根據(jù)標(biāo)簽名(tag_name)來(lái)選擇元素
# 根據(jù)tag name選擇元素,返回的是一個(gè)列表
# 里面都是tag名為div元素對(duì)應(yīng)的WebElement對(duì)象
elements = wd.find_elements(By.TAG_NAME, 'div')
print(elements)
# 取出列表中的每個(gè)WebElement對(duì)象,打印出其text屬性的值
# text屬性就是該WebElement對(duì)象對(duì)應(yīng)的元素在網(wǎng)頁(yè)中的文本內(nèi)容
for element in elements:
print(element.text)
3、根據(jù)WebElement對(duì)象選擇元素
3.1 解釋
WebElement對(duì)象也可以調(diào)用find_elements、find_element之類的方法
3.2 作用
WebDriver對(duì)象選擇元素的范圍是整個(gè)web頁(yè)面,而WebElement對(duì)象選擇元素的范圍是該元素內(nèi)部
# 根據(jù)id選擇元素
# 里面都是id名為container元素對(duì)應(yīng)的WebElement對(duì)象
elements = wd.find_element(By.ID, 'container')
# 限制選擇元素的范圍id為container元素的內(nèi)部
spans = elements.find_elements(By.TAG_NAME, 'span')
for span in spans:
print(span.text)
wd.quit()
4、操控元素的基本方法
4.1 點(diǎn)擊元素
調(diào)用元素WebElement對(duì)象的click方法(瀏覽器接到自動(dòng)化命令,點(diǎn)擊的是該元素中心點(diǎn)的位置)
#直接調(diào)用click()
a.click()
4.2 輸入框
調(diào)用元素WebElement對(duì)象的send_keys方法,如果要清除輸入框已經(jīng)有的內(nèi)容,可以用WebElement對(duì)象的clear方法
element = wd.find_element(By.ID,"input")
#清除輸入框已有的字符串
element.clear()
#輸入新字符串
element.send_keys('xxxx')
4.3 獲取元素內(nèi)容
獲取元素的文本內(nèi)容
element = wd.find_element(By.ID,'xxx')
print(element.text)
4.4 獲取元素屬性
通過(guò)WebElement對(duì)象的get_attribute方法來(lái)獲取元素的屬性值
element = wd.find_element(By.ID,'input_name')
print(element.get_attribute('class'))
4.5 獲取整個(gè)元素對(duì)應(yīng)的HTML
(1)要獲取整個(gè)元素對(duì)應(yīng)的HTML文本內(nèi)容
element.get_attribute(‘outerHTML’)
(2)如果只是想獲取某個(gè)元素內(nèi)部的HTML文本內(nèi)容
element.get_attribute(‘innerHTML’)
4.6 獲取輸入框里面的文字
element = wd.find_element(By.ID,"input")
#獲取輸入框中的文本
print(element.get_attribute('value'))
4.7 獲取元素文本內(nèi)容2
通過(guò)WebElement對(duì)象的text屬性,可以獲取元素展現(xiàn)在界面上的文本內(nèi)容,但有時(shí)候元素的文本內(nèi)容沒(méi)有展示在界面上,或者沒(méi)有完全展示在界面上。這時(shí),用WebElement對(duì)象的text屬性,獲取文本內(nèi)容,就會(huì)有問(wèn)題。
element.get_attribute('innerText')
element.get_attribute('textContent')
5、CSS表達(dá)式選擇元素
基礎(chǔ)格式,通過(guò)css樣式來(lái)選
element = wd.find_element(By.CSS_SELECTOR, '.plant')
print(element.get_attribute('outerHTML'))
5.1 根據(jù)tag名、id屬性、class屬性選擇元素
5.1.1 根據(jù)tag名選擇元素
根據(jù)tag名選擇元素,直接寫上tag名
elements = wd.find_elements(By.CSS_SELECTOR,'div')
#等價(jià)于
elements = wd.find_elements(By.TAG_NAME,'div')
注意:
#如果根據(jù)標(biāo)簽名來(lái)選擇,比如<span>.... </span>
elements = wd.find_elements(By.CSS_SELECTOR,'span')
#對(duì)比
#如果根據(jù)樣式class屬性來(lái)選擇,比如<a class="span">...</a>,那么前面要加'.'
elements = wd.find_elements(By.CSS_SELECTOR,'.span')
5.1.2 根據(jù)id屬性選擇元素
選擇元素的話,要在id號(hào)前加上一個(gè)井號(hào):#id值
elements = wd.find_elements(By.CSS_SELECTOR,'#search')
5.2 選擇子元素和后代元素
5.2.1 常用表示方法
(1)大于號(hào)’>',元素1>元素2,表示元素2是元素1的后代元素,可以有多級(jí)關(guān)系,但必須是直接子元素,不能是間接的。
#通過(guò)大于號(hào)就可以層層遞進(jìn)找到要的內(nèi)容
elements = wd.find_elements(By.CSS_SELECTOR,'#search > qu > look > #lazy')
(2)空格分隔’ ',元素1 元素2,表示元素2在元素1的范圍內(nèi),不管是否是直接子元素,間接子元素也可以。
#通過(guò)空格的判定,也可以找到對(duì)應(yīng)的元素里的內(nèi)容
elements = wd.find_elements(By.CSS_SELECTOR,'#search #lazy')
5.3 根據(jù)屬性選擇
css選擇器支持通過(guò)任何屬性來(lái)選擇元素,語(yǔ)法是用一個(gè)方括號(hào)[ ]
elements = wd.find_element(By.CSS_SELECTOR,'[href]')
也可以組合限制
#表示選擇所有標(biāo)簽名為div,且class屬性為SKnet的元素
elements = wd.find_element(By.CSS_SELECTOR,'div[class='SKnet']')
5.4 驗(yàn)證CSS Selector
在瀏覽器里按CTRL + F鍵來(lái)檢查
5.5 組合選擇
5.5.1 并列(用逗號(hào) ‘,’ 分割)
#輸出的是class屬性為plant和animal的值
elements = wd.find_element(By.CSS_SELECTOR,'.plant,.animal')
5.6 按照次序選擇子節(jié)點(diǎn)
5.6.1 父元素的第n個(gè)子節(jié)點(diǎn)
指定選擇的元素是父元素的第幾個(gè)子節(jié)點(diǎn),使用nth-child
#指定父元素為span的第二個(gè)子元素
elements = wd.find_element(By.CSS_SELECTOR,'span:nth-child(2)')
5.6.2 父元素倒數(shù)第幾個(gè)節(jié)點(diǎn)
指定選擇的元素是父元素的倒數(shù)第幾個(gè)子節(jié)點(diǎn),使用nth-last-child
#指定父元素為span的倒數(shù)第二個(gè)子元素
elements = wd.find_element(By.CSS_SELECTOR,'span:nth-last-child(2)')
5.6.3 父元素的第幾個(gè)某類型的子節(jié)點(diǎn)
指定選擇的元素是父元素的第幾個(gè)某類型的子節(jié)點(diǎn),使用nth-of-type
#選擇的是第1個(gè)span類型的子元素
elements = wd.find_element(By.CSS_SELECTOR,'span:nth-of-type(1)')
5.6.4 奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)
如果要選擇的是父元素的偶數(shù)節(jié)點(diǎn),使用nth-child(even)
如果要選擇的是父元素的奇數(shù)節(jié)點(diǎn),使用nth-child(odd)
#選擇id為t1下,屬性為p的偶數(shù)節(jié)點(diǎn)
elements = wd.find_element(By.CSS_SELECTOR,'#t1 p:nth-of-type(even)')
5.6.5 兄弟節(jié)點(diǎn)選擇
5.6.5.1 相鄰兄弟節(jié)點(diǎn)選擇
選擇h3后面緊跟著的兄弟節(jié)點(diǎn)span
表示元素緊跟關(guān)系的是加號(hào)+
所以是h3+span
elements = wd.find_element(By.CSS_SELECTOR,'h3+span')
5.6.5.2 后續(xù)所有兄弟節(jié)點(diǎn)選擇
如果要選擇h3后面所有的兄弟節(jié)點(diǎn)span,可以這樣寫h3 ~ span
elements = wd.find_element(By.CSS_SELECTOR,'h3~span')
6、frame切換
6.1 解釋
在html語(yǔ)法中,frame元素或者iframe元素的內(nèi)部會(huì)包含一個(gè)被嵌入的另一份html文檔,由于使用selenium打開一個(gè)網(wǎng)頁(yè),操縱范圍是當(dāng)前的html,并不包括被嵌入的html文檔里的內(nèi)容,如果要操作被嵌入的html文檔中的元素,就必須切換操作范圍到被嵌入的文檔中。
6.2 用法1
wd.switch_to.frame(frame_reference),其中frame_reference可以是frame元素的屬性name或id
6.2.1 樣例
#切換到被嵌入文檔中某個(gè)class屬性
wd.switch_to.frame('frame1')
6.3 用法2
wd.switch_to.frame(frame_reference),其中frame_reference也可以填寫frame所對(duì)應(yīng)的WebElement對(duì)象
6.3.1 樣例
wd.switch_to.frame(wd.find_element(By.TAG_NAME,'iframe'))
6.4 切換回原來(lái)的主頁(yè)面
wd.switch_to.default_content()
7、切換到新的窗口
7.1 基礎(chǔ)操作
由于需要到新的窗口操作
可以使用Webdriver對(duì)象的switch_to屬性的window方法
wd.switch_to.window(handle)
WebDriver對(duì)象有window_handles屬性,這是一個(gè)列表對(duì)象,里面包括了當(dāng)前瀏覽器里面所有的窗口句柄(類似于對(duì)應(yīng)窗口的一個(gè)ID)
7.2 判別新窗口的代碼
# 依次獲取wd.window_handles里面的所有句柄對(duì)象,并且調(diào)用wd.switch_to.window(handle)方法,
#切入到每個(gè)窗口,然后檢查里面該窗口對(duì)象的屬性(標(biāo)題欄。地址欄),判斷是不是我們要操作的那個(gè)窗口。
#如果是,就跳出循環(huán)。
for handle in wd.window_handles:
#先切換到該窗口
wd.switch_to.window(handle)
#得到該窗口的標(biāo)題欄字符串,判斷是不是要操作的那個(gè)窗口
if 'baidu' in wd.title:
#如果是,那么這時(shí)候WebDriver對(duì)象就是對(duì)應(yīng)的該窗口,正好跳出循環(huán)
break
7.3 切換到原來(lái)的窗口
進(jìn)入新窗口操作完后,回到原來(lái)窗口,可以先保存老窗口句柄
#mainWindow變量保存當(dāng)前窗口的句柄
mainWindow = wd.current_window_handle
#...等等操作代碼....
#切換新窗口操作完后,將driver對(duì)應(yīng)的對(duì)象返回到原來(lái)的窗口
wd.switch_to.window(mainWindow`)
8、radio選擇框(單選框)
radio框直接用WebElement的click方法,模擬用戶點(diǎn)擊就可以了。
#獲取當(dāng)前選中的元素
element = wd.find_element(By.CSS_SELECTOR,'#radio input[checked = checked]')
print('當(dāng)前選中的是:' + element.get_attribute('value'))
#點(diǎn)擊選擇
wd.find_element(By.CSS_SELECTOR,'#radio input[value = "學(xué)院"]').click()
print('現(xiàn)在選中的是:' + element.get_attribute('value'))
9、checkbox框(多選框)
對(duì)checkbox進(jìn)行選擇,也是直接用WebElement的click方法,模擬用戶點(diǎn)擊選擇。
9.1 思路
先把已經(jīng)選中的選項(xiàng)全部點(diǎn)擊一下,確保都是未選中狀態(tài),再點(diǎn)擊想要選擇的選擇框。
9.2 實(shí)現(xiàn)代碼
#先把已經(jīng)選中的選項(xiàng)全部點(diǎn)擊一下
elements = wd.find_elements(By.CSS_SELECTOR, '#checkbox input[checked = "checked"]')
for element in elements:
element.click()
wd.find_element(By.CSS_SELECTOR, '#checkbox input[value = '學(xué)院']').click()
10、select框
10.1 相關(guān)方法
10.1.1 根據(jù)選項(xiàng)的value屬性值,選擇元素
#例如頁(yè)面里<option value="foo">Bar</option>
s.select_by_value('foo')
10.1.2 根據(jù)選項(xiàng)的次序(從1開始),選擇元素
#例如頁(yè)面里<option value="foo">Bar</option>
s.select_by_index(1)
10.1.3 根據(jù)選項(xiàng)的可見(jiàn)文本,選擇元素
#例如頁(yè)面里<option value="foo">Bar</option>
s.select_by_visible_text('Bar')
10.1.4 根據(jù)選項(xiàng)的value屬性值,去除選中元素
deselect_by_value
10.1.5 根據(jù)選項(xiàng)的次序,去除選中元素
deselect_by_index
10.1.6 根據(jù)選項(xiàng)的可見(jiàn)文本,去除選中元素
deselect_by_visible_text
10.1.7 去除選中所有元素
deselect_all
10.2 Select單選框
直接用Select方法選擇
#導(dǎo)入Select類
from.selenium.webdriver.support.ui import Select
#創(chuàng)建Select對(duì)象
select = Select(wd.find_element(By.ID,"single"))
#通過(guò)Select對(duì)象選中
select.select_by_visible_text("學(xué)院")
10.3 Select多選框
可以用select類的deselect_all方法,清除所有已經(jīng)選中的選項(xiàng),然后通過(guò)select_by_visible_text方法選擇
#導(dǎo)入Select類
from.selenium.webdriver.support.ui import Select
#創(chuàng)建Select對(duì)象
select = Select(wd.find_element(By.ID,"multi"))
#清除所有已經(jīng)選中的選項(xiàng)
select.deselect_all()
#選擇對(duì)應(yīng)選項(xiàng)
select.select_by_visible_text("學(xué)院1")
select.select_by_visible_text("學(xué)院2")
11、其他操作元素的方法
ActionChains類里面提供了一些特殊動(dòng)作的模擬。
11.1 使用ActionChains來(lái)模擬鼠標(biāo)移動(dòng)
from selenium.webdriver.common.action_chains import ActionChains
#初始化對(duì)象
ac = ActionChains(wd)
#鼠標(biāo)移動(dòng)到元素上
ac.move_to_element(
wd.find_element(By.CSS_SELECTOR,'[name="briicon"]')
).perform()
12、凍結(jié)界面
在開發(fā)者工具欄console里面執(zhí)行如下js代碼
#凍結(jié)界面5秒
setTimeout(function(){debugger},5000)
13、彈出框處理
13.1 Alert彈出框
模擬用戶點(diǎn)擊OK按鈕
#---alert----
driver.find_element(By.ID,'b1').click()
#打印彈出框提示信息(獲取彈出對(duì)話框的文本)
print(driver.switch_to.alert.text)
#點(diǎn)擊OK按鈕
driver.switch_to.alert.accept()
13.2 Confirm
Confirm彈出框,主要是讓用戶確認(rèn)是否要進(jìn)行某個(gè)操作
13.2.1 點(diǎn)擊OK按鈕
driver.switch_to.alert.accept()
13.2.2 點(diǎn)擊Cancel按鈕
driver.switch_to.alert.dismiss()
13.2.3 樣例
#---confirm----
driver.find_element(By.ID,'b1').click()
#打印彈出框提示信息(獲取彈出對(duì)話框的文本)
print(driver.switch_to.alert.text)
#點(diǎn)擊OK按鈕
driver.switch_to.alert.accept()
driver.find_element(By.ID,'b2').click()
#點(diǎn)擊取消按鈕
driver.switch_to.alert.dismiss()
13.3 Prompt
13.3.1 基礎(chǔ)知識(shí)
出現(xiàn)Prompt彈出框是需要用戶輸入一些信息,提交上去
driver.switch_to.alert.send_keys()
13.3.2 實(shí)例
#獲取alert對(duì)象
alert = driver.switch_to.alert
#打印彈出框提示信息
print(alert.text)
#輸入信息,并且點(diǎn)擊OK按鈕提交
alert.send_keys('web自動(dòng)化 - selenium')
alert.accept()
#點(diǎn)擊Cancel按鈕取消
driver.find_element(By.ID,'b3').click()
alert = driver.switch_to.alert
alert.dismiss()
13.4 注意
有些彈窗并非瀏覽器的alert窗口,而是html元素,這種對(duì)話框,只需要通過(guò)之前介紹的選擇器選中并進(jìn)行相應(yīng)的操作。
14、xpath選擇元素
14.1 絕對(duì)路徑選擇
Xpath路徑以正斜杠(/)開始,就表示從根節(jié)點(diǎn)開始,從根節(jié)點(diǎn)開始的路徑表達(dá)式,就是某元素的絕對(duì)路徑。
xpath表達(dá)式 /html/body/div 等價(jià)于 css表達(dá)式里的 html>body>div
如果要使用Xpath來(lái)選擇web元素,應(yīng)該調(diào)用WebDriver對(duì)象的方法
find_element(By.XPATH, ‘XX’)
或者
find_elements(By.XPATH, ‘XX’)
elements = driver.find_elements(By.XPATH,'/html/body/div')
14.2 相對(duì)路徑選擇
如果要選擇某個(gè)元素,不管它的位置,那么如果用css表達(dá)式,直接寫一個(gè)div就可以了,如果用xpath,那么xpath需要前面加//,表示從當(dāng)前節(jié)點(diǎn)往下尋找所有的后代元素,不管它在什么位置,則寫成//div。
#選擇div元素里面的所有的p元素
elements = driver.find_elements(By.XPATH,'//div//p')
14.3 通配符
如果要選擇所有div節(jié)點(diǎn)的所有直接子節(jié)點(diǎn),可以使用表達(dá)式//div/*,是一個(gè)通配符,對(duì)應(yīng)任意節(jié)點(diǎn)名的元素,等價(jià)于css選擇器div>
elements = driver.find_elements(By.XPATH,'//div/*')
for element in elements:
print(element.get_attribute('outerHTML'))
14.4 根據(jù)屬性選擇
14.4.1 用法
根據(jù)屬性來(lái)選擇元素,是通過(guò)[@屬性名 = ‘屬性值’]
14.4.2 注意
屬性名前有@
屬性值一定要用引號(hào),可以是單引號(hào),也可以是雙引號(hào)
14.4.3 根據(jù)id屬性選擇
選擇id為west
//*[@id='west']
14.4.4 根據(jù)class屬性選擇
選擇所有div元素中class為single_choice的元素
//div[@class='single_choice']
如果一個(gè)元素class有多個(gè)
//p[@class="capital huge-city"]
14.4.5 css選擇屬性值包含某個(gè)字符串的元素
#選擇a節(jié)點(diǎn),里面的href屬性包含了beian字符串
a[href*="beian"]
14.4.6 選擇屬性值以某個(gè)字符串開頭的元素
#選擇a節(jié)點(diǎn),里面的href屬性以http開頭
a[href^="beian"]
14.4.7 選擇屬性值以某個(gè)字符串結(jié)尾的元素
#選擇a節(jié)點(diǎn),里面的href屬性以gov.cn結(jié)尾
a[href$="gov.cn"]
14.4.8 屬性值包含字符串
#選擇style屬性值包含color字符串的頁(yè)面元素
//*[contains(@style,'color')]
#選擇style屬性值以color字符串開頭的頁(yè)面元素
//*[starts-with(@style,'color')]
14.5 按次序選擇
xpath也可以根據(jù)次序選擇元素。語(yǔ)法比css更簡(jiǎn)潔,直接在方括號(hào)中使用數(shù)字表示次序
14.5.1 某類型第幾個(gè)子元素
#選擇p類型第2個(gè)的子元素
//p[2]
#選取父元素為div中的p類型第2個(gè)子元素
//div/p[2]
14.5.2 第幾個(gè)子元素
#選擇父元素為div的第2個(gè)子元素
//div/*[2]
14.5.3 某類型 倒數(shù)第幾個(gè)子元素
last( )本身代表最后一個(gè)元素
last( )-1本身代表倒數(shù)第2個(gè)元素
#選取p類型倒數(shù)第1個(gè)子元素
//p[last()]
#選擇p類型倒數(shù)第2個(gè)子元素
//p[last()-1]
#選擇父元素為div中p類型倒數(shù)第二個(gè)子元素
//div/p[last()-2]
14.5.4 范圍選擇
xpath還可以選擇子元素的次序范圍
#選取option類型第1到2個(gè)子元素
//option[position()<=2]
//option[position()<3]
#選擇class屬性為multi_choice的前3個(gè)子元素
//*[@class='multi_choice']/*[position()<=3]
#選擇class屬性為multi-choice的后3個(gè)子元素
//*[@class='multi_choice']/*[position()>=last()-2]
14.6 組選擇和兄弟節(jié)點(diǎn)
14.6.1 組選擇
css有組選擇,可以同時(shí)使用多個(gè)表達(dá)式,多個(gè)表達(dá)式選擇的結(jié)果都是要選擇的元素。
(1)css和xpath的區(qū)別
css組選擇,表達(dá)式之間用 逗號(hào) 隔開
xpath則是用 豎線 隔開多個(gè)表達(dá)式
#選擇所有的option元素和所有的h4元素
//option|//h4
#等同于css選擇器
option,h4
#選擇所有的class為single_choice和class為multi_choice的元素
//*[@class='single_choice']|//*[@class='multi_choice']
14.6.2 選擇父節(jié)點(diǎn)
某個(gè)元素的父節(jié)點(diǎn)用/…表示
#選擇id為china的節(jié)點(diǎn)的父節(jié)點(diǎn)
//*[@id='china']/..
#繼續(xù)找上層父節(jié)點(diǎn)
//*[@id='china']/../../..
14.6.3 選擇兄弟節(jié)點(diǎn)
(1) xpath選擇后續(xù)兄弟節(jié)點(diǎn),用following-sibling::
#選擇class為single_choice的元素的所有后續(xù)兄弟節(jié)點(diǎn)
//*[@class='single_choice']/following-sibling::*
#選擇class為single_choice的元素的所有后續(xù)兄弟節(jié)點(diǎn)的div節(jié)點(diǎn)
//*[@class='single_choice']/following-sibling::div
(2) xpath選擇前面的兄弟節(jié)點(diǎn),用preceding-sibling::文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-794952.html
#選擇class為single_choice的元素的所有前面的兄弟節(jié)點(diǎn)
//*[@class='single_choice']/preceding-sibling::*
14.7 注意
xpath如果在某個(gè)WebElement里使用時(shí),如果要選擇里面的元素,前面一定要加小數(shù)點(diǎn)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-794952.html
#先尋找id是china的元素
china = wd.find_element(By.ID, 'china')
#再通過(guò)WebElement對(duì)象選擇該元素內(nèi)部的p元素
elements = china.find_element(By.XPATH, './/p')
到了這里,關(guān)于Python爬蟲技術(shù)之Selenium自動(dòng)化測(cè)試及模擬點(diǎn)擊頁(yè)面爬蟲最全知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!