2013-03-13 7 views
5

Seleniun WebDriver ve Python için oldukça yeniyim ve sorumu temel olabilir. Ben onun XPath ".//*[@id='toplevel_page_menu']/ul/li[2]/a" olduğunu bilerek, XPath araçlarını, bunun dışında href ayıklamak olmaya çalışıyorumSelenyum Webdriver ve Python'u kullanarak XPath bağlantısını ayırın.

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

Ve :

Yani, aşağıdaki HTML kodu var.

Bunu nasıl yaparım?

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

veya

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

sonuçlanan çalışmıyor gibi görünüyor etmeyin: Ben sonuç "admin.php?page=account" gibi olmak bekliyorum

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

. Bir sayfaya

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

Normalde ben gezinmek için Selenyum kullanmak kaynağı almak ve BeautifulSoup ile ayrıştırmak:

cevap

6

Sen get_attribute kullanabilirsiniz

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'] 

Maalesef BeautifulSoup xpath desteklemez, Bu yüzden yukarıdaki xpath'in BS gösterimidir (anladığım kadarıyla).

+0

get_attribute() işlevinin çalışması için egzotik bir şey almam gerekir mi? Sonunda/href eklenmesi işe yaramıyor gibi görünüyor. –

+0

try 'element = driver.find_element_by_xpath (" .//*[@ id = 'toplevel_page_menu']/ul/li [2]/a ")' 'get_attribute': 'öğesini kullanın. Print element.get_attribute (' href ') '. İşe yarayabilir. Karışıklık için üzgünüm, tipik olarak Selenium üzerinden kaynak veri ayıklamıyorum. Dediğim gibi, genellikle BS kullanırım. – That1Guy