English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata dei modi di localizzazione dei nodi genitore, fratello e adiacente di selenium in Python

Oggi condividerò con voi i metodi di localizzazione dei nodi genitore, fratello e adiacente nel Selenium, molti utenti si scontrano con la difficoltà di localizzare direttamente il nodo desiderato e devono utilizzare i nodi vicini per localizzare relativamente. Tuttavia, è più facile localizzare un figlio dal genitore rispetto a localizzare un genitore dal figlio o localizzare il fratello di un nodo. Non preoccupatevi, vediamo passo dopo passo come lo spiega l'autore.

1. Localizzazione del nodo figlio tramite il nodo genitore

Il metodo più semplice è sicuramente la localizzazione del nodo figlio tramite il nodo genitore, abbiamo molti metodi per localizzare, ecco un esempio precedente:

Per quanto riguarda il seguente codice:

<html>
<body>
<div id="A">
<!--Localizzazione del nodo genitore per il nodo figlio-->
<div id="B">
<div>parent to child</div>
</div>
</div>
</body>
</html>

Per localizzare il nodo figlio senza id in base al nodo B, ecco un esempio di codice:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.ricerca concatenata
print(driver.find_element_by_id('B').find_element_by_tag_name('div').text)
# 2.ricerca relazione padre-figlio xpath
print(driver.find_element_by_xpath("//div[@id='B']/div").text)
# 3.selettore CSS relazione padre-figlio
print(driver.find_element_by_css_selector('div#B>div').text)
# 4.selettore CSS nth-child
print(driver.find_element_by_css_selector('div#B div:nth-child(1)').text)
# 5.selettore CSS nth-of-type
print(driver.find_element_by_css_selector('div#B div:nth-of-type(1)').text)
# 6.asse xpath child
print(driver.find_element_by_xpath("//div[@id='B']/child::div").text)
driver.quit()

Risultato:

parent to child
parent to child
parent to child
parent to child
parent to child
parent to child

I primi 3 metodi sono familiari a noi, quindi non vale la pena di parlare di più. Il quarto metodo utilizza un selettore CSS: nth-child(n), che restituisce il nodo n-esimo, che è un tag div; il quinto metodo utilizza un altro selettore CSS: nth-of-type(n), che restituisce il div n-esimo, notare la differenza rispetto al selettore precedente; il sesto metodo utilizza l'asse xpath child, che è l'asse predefinito di xpath, può essere ignorato, di fatto è lo stesso del metodo 2.

Certo, ci sono alcuni selector CSS che possono scegliere la relazione padre-figlio come last-child, nth-last-child ecc., chi è interessato può cercare su Baidu, l'autore parlerà degli selector CSS se ci sarà l'opportunità.

2. Localizzare il nodo genitore dal nodo figlio

E 'difficile localizzare il nodo genitore dal nodo figlio, guardiamo il codice seguente:

<html>
<body>
<div id="A">
<!--Localizzazione del nodo figlio al nodo genitore-->
<div>
<div>figlio a genitore
<div>
<div id="C"></div>
</div>
</div>
</div>
</div>
</body>
</html>

Vogliamo ottenere il div dei due nodi genitori del nodo C, ecco un esempio di codice:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\py\\AutoTestFramework\\src\\others\\test.html')
# 1. assegnamento XPath: `.` rappresenta il nodo corrente; '..' rappresenta il nodo genitore
print driver.find_element_by_xpath("//div[@id='C']/../..").text
# 2. assegnamento XPath parent
print driver.find_element_by_xpath("//div[@id='C']/parent::*/parent::div").text
driver.quit()

Risultato:

figlio a genitore
figlio a genitore

Abbiamo due metodi qui, il primo è la forma .., come sappiamo, . rappresenta il nodo corrente, .. rappresenta il nodo genitore; il secondo metodo è lo stesso dell'assegnamento precedente, è un assegnamento dell'assegno XPath: parent, che prende il nodo genitore del nodo corrente. Questo è anche un punto debole degli selector CSS, perché il design di CSS non permette di avere metodi per ottenere il nodo genitore (almeno per ora)

3. Localizzare il fratello superiore dal nodo più giovane

Questi sono il caso 3 e 4, qui dobbiamo localizzare i nodi fratelli. Ecco l'esempio di codice sorgente:

<html>
<body>
<div id="A">
<!--I due nodi seguenti servono per la localizzazione dei fratelli-->
<div>fratello 1</div>
<div id="D"></div>
<div>fratello 2</div>
</div>
</body>
</html>

Come ottenere il fratello superiore del nodo D? Ecco un esempio di codice:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html')
# 1. assegnamento XPath, ottenere il fratello superiore tramite il nodo genitore
print driver.find_element_by_xpath("//div[@id='D']/../div[1]").text
# 2. assegnamento XPath preceding-sibling
print driver.find_element_by_xpath("//div[@id='D']/preceding-sibling::div[1]").text
driver.quit()

risultato

fratello 1
fratello 1

Qui anche l'autore ha elencato due metodi, uno è ottenere il nodo fratello tramite il nodo padre del nodo corrente, e l'altro è più elegante, utilizza l'asse xpath: preceding-sibling, che può ottenere tutti i nodi fratello同级 del nodo corrente, notare il numero all'interno dei parentesi, 1 rappresenta il fratello più vicino al nodo corrente, man mano che il numero aumenta, rappresenta il fratello più lontano dal nodo corrente, naturalmente, l'asse xpath: preceding può essere utilizzato, ma è più complesso, ottiene tutti i nodi non antenati precedenti al nodo (è difficile spiegare qui, scriverò un articolo specifico in un altro giorno per spiegare tutti gli assi)

4. Localizzare il fratello del nodo da un nodo fratello

La sorgente del codice è identica a 3, per localizzare il fratello del nodo D, vedere l'esempio di codice:

# -*- coding: utf-8 -*-
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('D:\\Code\\py\\AutoTestFramework\\src\\others\\test.html')
# 1.xpath,通过父节点获取其弟弟节点
print driver.find_element_by_xpath("//div[@id='D']/../div[3]").text
# 2.xpath轴 following-sibling
print driver.find_element_by_xpath("//div[@id='D']/following-sibling::div[1]").text
# 3.xpath轴 following
print driver.find_element_by_xpath("//div[@id='D']/following::*").text
# 4.css selector +
print driver.find_element_by_css_selector('div#D + div').text
# 5.css selector ~
print driver.find_element_by_css_selector('div#D ~ div').text
driver.quit()

Risultato:

fratello 2
fratello 2
fratello 2
fratello 2
fratello 2

L'autore ha condiviso cinque metodi per localizzare i nodi fratelli, i primi tre utilizzano xpath: il primo è facile da capire, il secondo utilizza l'asse xpath: following-sibling, simile a preceding-sibling, il cui ruolo è ottenere tutti i nodi fratelli同级 al nodo corrente, allo stesso modo, 1 rappresenta il fratello più vicino al nodo corrente, numeri più grandi rappresentano nodi fratelli più lontani dal nodo corrente; il terzo utilizza l'asse xpath: following, per ottenere tutti i nodi dopo il nodo corrente, eccetto i nodi antenati (opposto a preceding, ma dato che leggere in senso ascendente è più facile e meno soggetto a errori, può anche essere utilizzato per ottenere nodi fratelli, ma non è consigliabile farlo); i terzi e quinti metodi utilizzano css selector, la differenza tra + e ~ è che: + rappresenta il nodo div immediatamente successivo al nodo corrente, ~ rappresenta il nodo div successivo al nodo corrente, se si utilizza find_elements, è possibile ottenere un elenco di nodi div.

La presente guida dettagliata sui metodi di localizzazione dei nodi genitore, fratello e vicino di Python selenium fornita dall'autore è completa. Spero che sia utile a tutti. Se avete domande, lasciate un commento e l'autore risponderà tempestivamente. Ringrazio anche tutti i sostenitori del sito tutorial di urla!

Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, di proprietà del rispettivo autore. Il contenuto è stato contribuito e caricato dagli utenti di Internet autonomamente. Questo sito non detiene il diritto di proprietà e non ha effettuato alcuna modifica editoriale, né assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, invia un'e-mail a notice#oldtoolbag.com (sostituisci # con @) per segnalare il problema, fornendo prove pertinenti. Una volta verificata, questo sito rimuoverà immediatamente i contenuti sospetti di violazione del copyright.

Ti potrebbe interessare