2013-03-13 318 views
5

我對Seleniun WebDriver和Python很新,我的問題可能是基本的。使用Selenium Webdriver和Python從XPath中提取鏈接?

所以,我有以下的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,所以上面是你的xpath的BS表示(據我瞭解)。

+0

我是否需要導入一些奇特的東西才能讓get_attribute()工作? 在最後添加/ @ href似乎不起作用。 – 2013-03-13 15:08:19

+0

嘗試'element = driver.find_element_by_xpath(「.//*[@ id ='toplevel_page_menu']/ul/li [2]/a」)'然後使用'get_attribute':'print element.get_attribute('href') '。這可能會起作用。我很抱歉,我通常不會通過Selenium提取源數據。就像我說的,我通常使用BS。 – That1Guy 2013-03-13 15:52:24

相關問題