2013-03-13 16 views
5

Я довольно новичок в Seleniun WebDriver и Python, и мой вопрос может быть довольно простым.Извлечь ссылку из XPath с помощью Selenium Webdriver и Python?

Итак, у меня есть следующий HTML-код:

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

И Я пытаюсь извлечь HREF из него, быть средством XPath, зная, что его XPath является ".//*[@id='toplevel_page_menu']/ul/li[2]/a".

Как это сделать?

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

или

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

Не похоже на работу, в результате чего:

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

Я ожидаю, что результат будет, как "admin.php?page=account".

ответ

6

Вы можете использовать get_attribute:

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

Обычно я использую Selenium, чтобы перейти на страницу, получить источник и разобрать его с 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'] 

К сожалению, BeautifulSoup не поддерживает XPath, поэтому выше - представление BS вашего xpath (насколько я понимаю).

+0

Нужно ли импортировать что-то экзотическое для того, чтобы get_attribute() работал? Добавление/@ href в конце не работает. –

+0

try 'element = driver.find_element_by_xpath (" .//*[@ id = 'toplevel_page_menu']/ul/li [2]/a ")', затем используя 'get_attribute':' print element.get_attribute ('href') '. Это может сработать. Прошу прощения за путаницу, я обычно не извлекаю исходные данные через Selenium. Как я уже сказал, я обычно использую BS. – That1Guy