2013-03-13 18 views
5

Jestem raczej nowy w Seleniun WebDriver i Pythonie, a moje pytanie może być trochę podstawowe.Wyciągnij link z XPath, używając Selenium Webdriver i Python?

Tak, mam następujący kod HTML:

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

I staram się wydobyć z niego href być środki XPath, wiedząc, że jego XPath jest ".//*[@id='toplevel_page_menu']/ul/li[2]/a".

Jak to zrobić?

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

lub

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

Nie wydaje się działać, powodując:

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

Czekam rezultat być jak "admin.php?page=account".

Odpowiedz

6

Można użyć get_attribute:

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

Zwykle używam selen, aby przejść do strony, pobierać źródła i analizować je z 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'] 

Niestety BeautifulSoup nie obsługuje XPath, więc powyższe jest reprezentacją BS twojej xpath (o ile rozumiem).

+0

Czy muszę importować coś egzotycznego, aby get_attribute() działał? Dodawanie/@ href na końcu wydaje się nie działać. –

+0

spróbuj 'element = driver.find_element_by_xpath (" .//** id = "toplevel_page_menu ']/ul/li [2]/a") 'następnie używając' get_attribute': 'print element.get_attribute (' href ') '. To może zadziałać. Przepraszam za zamieszanie, zazwyczaj nie wydobywam danych źródłowych za pośrednictwem Selenium. Tak jak mówiłem, zazwyczaj używam BS. – That1Guy

Powiązane problemy