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