国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬蟲技術(shù)之Selenium自動(dòng)化測(cè)試及模擬點(diǎn)擊頁(yè)面爬蟲最全知識(shí)

這篇具有很好參考價(jià)值的文章主要介紹了Python爬蟲技術(shù)之Selenium自動(dòng)化測(cè)試及模擬點(diǎn)擊頁(yè)面爬蟲最全知識(shí)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、基礎(chǔ)認(rèn)識(shí)

1、解釋

Selenium是一套Web網(wǎng)站的程序自動(dòng)化操作解決方案(比如點(diǎn)擊界面按鈕,在文本框中輸入文字等操作)

2、流程

Selenium的自動(dòng)化原理如下
python爬蟲 click,Python爬蟲技術(shù),python,爬蟲,selenium

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)行選擇
python爬蟲 click,Python爬蟲技術(shù),python,爬蟲,selenium

由于我的是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::

#選擇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)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python自動(dòng)化測(cè)試selenium核心技術(shù)三種等待方式

    python自動(dòng)化測(cè)試selenium核心技術(shù)三種等待方式

    UI自動(dòng)化測(cè)試過(guò)程中,可能會(huì)出現(xiàn)因測(cè)試環(huán)境不穩(wěn)定、網(wǎng)絡(luò)慢等情況,如果不做任何處理的話,會(huì)出現(xiàn)無(wú)法定位到特定元素而報(bào)錯(cuò),導(dǎo)致自動(dòng)化測(cè)試無(wú)法順利執(zhí)行。 selenium官網(wǎng)手冊(cè):Waits | Selenium slenium自動(dòng)化測(cè)試中,主要涉及三種等待方式:???? 缺點(diǎn):即使網(wǎng)絡(luò)條件較好時(shí)

    2024年04月11日
    瀏覽(27)
  • 【UI自動(dòng)化測(cè)試技術(shù)】自動(dòng)化測(cè)試研究:Python+Selenium+Pytest+Allure,詳解UI自動(dòng)化測(cè)試,學(xué)習(xí)模擬鼠標(biāo)+模擬鍵盤進(jìn)行相關(guān)操作(精)(四)

    1、了解元素交互的常用方法 2、學(xué)習(xí)如何對(duì)多選元素進(jìn)行操作 3、 學(xué)習(xí)模擬鼠標(biāo)進(jìn)行相關(guān)操作 ( 本節(jié)目標(biāo) ) 4、 學(xué)習(xí)模擬鍵盤進(jìn)行相關(guān)操作 ( 本節(jié)目標(biāo) ) 用于向 Web 瀏覽器提供虛擬化設(shè)備輸入操作的低級(jí)接口.除了剛剛講過(guò)的Web元素交互之外, Actions 接口 還提供了對(duì)指定輸

    2024年03月24日
    瀏覽(92)
  • 自動(dòng)化測(cè)試介紹、selenium用法(自動(dòng)化測(cè)試框架+爬蟲可用)

    自動(dòng)化測(cè)試介紹、selenium用法(自動(dòng)化測(cè)試框架+爬蟲可用)

    1、什么是自動(dòng)化測(cè)試? 程序測(cè)試程序、代碼代替思維、腳本代替人工 核心:質(zhì)量和效率 作用:降低成本、節(jié)省人力時(shí)間、推動(dòng)CI和DevOps、準(zhǔn)確性和可靠性、模擬人工難以實(shí)現(xiàn)的手段、快速持續(xù)迭代發(fā)布能力、衡量產(chǎn)品的質(zhì)量、提升測(cè)試效率、提高測(cè)試覆蓋率 2、手工測(cè)試

    2024年03月08日
    瀏覽(39)
  • 爬蟲學(xué)習(xí)(13):selenium自動(dòng)化測(cè)試(二):等待頁(yè)面加載完成

    在上一篇已經(jīng)講過(guò)了大部分的知識(shí)點(diǎn)和實(shí)戰(zhàn),本篇主要內(nèi)容為知識(shí)點(diǎn)回顧和多個(gè)元素的定位知識(shí)點(diǎn)補(bǔ)充,以及補(bǔ)充頁(yè)面加載知識(shí)點(diǎn)和案例。 在一個(gè)頁(yè)面中有很多不同的策略可以定位一個(gè)元素。在你的項(xiàng)目中,你可以選擇最合適的方法去查找元素。Selenium提供了下列的方法給你

    2024年02月06日
    瀏覽(36)
  • 爬蟲學(xué)習(xí)(16):selenium自動(dòng)化測(cè)試:人為模擬滑塊移動(dòng)

    爬蟲學(xué)習(xí)(16):selenium自動(dòng)化測(cè)試:人為模擬滑塊移動(dòng)

    場(chǎng)景描述:本次項(xiàng)目是給一個(gè)學(xué)校的填體溫系統(tǒng),做了一個(gè)自動(dòng)填報(bào)工具,遇到了一個(gè)滑塊,需要模擬移動(dòng)一下。 這里只對(duì)滑塊模擬部分代碼進(jìn)行展示,以幫助大家面臨這種移動(dòng)問(wèn)題的解決。 思想其實(shí)很簡(jiǎn)單,就是模擬人慢慢的拖動(dòng)。其實(shí)有個(gè)技術(shù)難點(diǎn)是缺口的識(shí)別,計(jì)算移

    2024年02月16日
    瀏覽(27)
  • python爬蟲(七)--------selenium自動(dòng)化

    查找方法(python3.7之前版本) find_element_by_id 根據(jù)id屬性來(lái)定位 find_element_by_name 根據(jù)name元素來(lái)定位 find_element_by_xpath 根據(jù)xpath語(yǔ)法來(lái)定位 find_element_by_tag_name 根據(jù)標(biāo)簽名來(lái)定位 find_element_by_class_name 根據(jù)class的名字來(lái)定位 find_element_by_css_selector 根據(jù)css選擇器來(lái)定位 以下兩種方法都

    2024年01月16日
    瀏覽(29)
  • Python爬蟲實(shí)戰(zhàn)——Lazada商品數(shù)據(jù)(selenium自動(dòng)化爬蟲,xpath定位)

    Python爬蟲實(shí)戰(zhàn)——Lazada商品數(shù)據(jù)(selenium自動(dòng)化爬蟲,xpath定位)

    ? ? ? ? 在此說(shuō)明,這個(gè)項(xiàng)目是我第一次真正去爬的一個(gè)網(wǎng)站,里面寫的代碼我自己都看不下去,但是已經(jīng)不想花時(shí)間去重構(gòu)了,所以看個(gè)樂(lè)呵就好,要噴也可以(下手輕一點(diǎn))。這篇文算是記錄我的學(xué)習(xí)中出現(xiàn)的一些問(wèn)題,不建議拿來(lái)學(xué)習(xí)和真拿我的代碼去爬Lazada的數(shù)據(jù),

    2024年02月02日
    瀏覽(22)
  • Python Selenium UI自動(dòng)化測(cè)試_python 自動(dòng)化ui測(cè)試

    Python Selenium UI自動(dòng)化測(cè)試_python 自動(dòng)化ui測(cè)試

    2.2 安裝selenium pip install selenium pip install selenium==2.53.0 2.3 下載webdriver驅(qū)動(dòng) 以chrome瀏覽器為例 查看chrome瀏覽器版本:在地址欄輸入 chrome://version chromedriver下載地址:http://chromedriver.storage.googleapis.com/index.html 下載與瀏覽器版本對(duì)應(yīng)的chrome driver 將下載好的chrome driver 解壓,并放至到

    2024年04月14日
    瀏覽(26)
  • Python + Selenium自動(dòng)化測(cè)試

    Python + Selenium自動(dòng)化測(cè)試

    一、python 1、python下載與安裝 官方下載地址: Python Releases for Windows | Python.org https://www.python.org/downloads/windows/ 下載應(yīng)用程序,雙擊運(yùn)行 選擇install now進(jìn)行安裝,下方勾選第二個(gè)選項(xiàng)系統(tǒng)可自動(dòng)添加環(huán)境變量 ? 等待python安裝 ?安裝完成后,點(diǎn)擊“Close”關(guān)閉 進(jìn)入cmd驗(yàn)證是否已完

    2023年04月24日
    瀏覽(18)
  • Selenium+python怎么搭建自動(dòng)化測(cè)試框架、執(zhí)行自動(dòng)化測(cè)試用例、生成自動(dòng)化測(cè)試報(bào)告、發(fā)送測(cè)試報(bào)告郵件

    Selenium+python怎么搭建自動(dòng)化測(cè)試框架、執(zhí)行自動(dòng)化測(cè)試用例、生成自動(dòng)化測(cè)試報(bào)告、發(fā)送測(cè)試報(bào)告郵件

    本人在網(wǎng)上查找了很多做自動(dòng)化的教程和實(shí)例,偶然的一個(gè)機(jī)會(huì)接觸到了selenium,覺(jué)得非常好用。后來(lái)就在網(wǎng)上查閱各種selenium的教程,但是網(wǎng)上的東西真的是太多了,以至于很多東西參考完后無(wú)法系統(tǒng)的學(xué)習(xí)和應(yīng)用。 以下整理的只是書中自動(dòng)化項(xiàng)目的知識(shí)內(nèi)容,介紹怎么搭

    2024年02月05日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包