2013-03-13 14 views
5

Sono piuttosto nuovo per Seleniun WebDriver e Python e la mia domanda potrebbe essere un po 'di base.Estrai link da XPath usando Selenium Webdriver e Python?

Così, ho il seguente codice HTML:

<a class="wp-first-item" href="admin.php?page=account">Account</a> 

E sto cercando di estrarre il href fuori di esso, essere mezzo di XPath, sapendo che la sua XPath è ".//*[@id='toplevel_page_menu']/ul/li[2]/a".

Come faccio?

driver.find_element_by_xpath(".//*[@id='toplevel_page_menu']/ul/li[2]/a").link 

o

driver.find_element_by_xpath(".//*[@id='toplevel_page_menu']/ul/li[2]/a").href 

non sembrano lavorare, con conseguente:

AttributeError: 'WebElement' object has no attribute 'link' 

mi aspetto il risultato di essere come "admin.php?page=account".

risposta

6

Si potrebbe utilizzare get_attribute:

element = driver.find_element_by_xpath(".//*[@id='toplevel_page_menu']/ul/li[2]/a") 
href = element.get_attribute('href') 
print href 

Di solito io uso selenio per passare a una pagina, recuperare la fonte e analizzarlo con BeautifulSoup:

from BeautifulSoup import BeautifulSoup 

# On the current page 
source = driver.page_source 
soup = BeautifulSoup(source) 

href = soup('<the tag containing the anchor>',{'id':'toplevel_page_menu'})[0]('ul')[0]('li')[2]('a')[0]['href'] 

Purtroppo, BeautifulSoup non supporta XPath, quindi quanto sopra è una rappresentazione BS di xpath (per quanto ho capito).

+0

Devo importare qualcosa di esotico affinché get_attribute() funzioni? L'aggiunta/@ href alla fine non sembra funzionare. –

+0

try 'element = driver.find_element_by_xpath (" .//*[@ id = 'toplevel_page_menu']/ul/li [2]/a ")' quindi usando 'get_attribute':' print element.get_attribute ('href') '. Potrebbe funzionare. Mi dispiace per la confusione, in genere non estrarre i dati di origine tramite Selenium. Come ho detto, di solito uso BS. – That1Guy

Problemi correlati