2013-07-09 120 views
1

因此,我使用了Selenium和Python 2.7的組合(並且如果問題重大,我使用的瀏覽器是Firefox)。我是XPath新手,但對於獲取WebElements看起來非常有用。通過find_element_by_xpath返回WebElements的列表

我有我通過解析以下HTML文件:

<html> 
    <head></head> 
    <body> 
    .. 
    <div id="childItem"> 
     <ul> 
     <li class="listItem"><img/><span>text1</span></li> 
     <li class="listItem"><img/><span>text2</span></li> 
     ... 
     <li class="listItem"><img/><span>textN</span></li> 
     </ul> 
    </div> 
    </body> 
</html> 

現在我可以使用下面的代碼來獲取所有的li元素的列表:

root = element.find_element_by_xpath('..') 
child = root.find_element_by_id('childDiv') 
list = child.find_elements_by_css_selector('div.childDiv > ul > li.listItem') 

我想知道我如何在XPath語句中執行此操作。我已經嘗試了一些statments但最簡單的就是:

list = child.find_element_by_xpath('li[@class="listItem"]') 

但我總是最後得到的錯誤:

selenium.common.exceptions.NoSuchElementException: Message: u'Unable to locate element: {"method":"xpath","selector":"li[@class=\\"listItem\\"]"}';

,因爲我有一個變通(前三行)這對我來說並不重要,但我想知道我做錯了什麼。

回答

3

您在XPath的開始缺少.//

list = child.find_element_by_xpath('.//li[@class="listItem"]') 

.//意味着在child元素內的任何地方進行搜索。

+0

所以''.''是當前元素,那麼''//''意味着它的任何孩子? – James

+0

是的。請注意,如果你只是'''(即沒有'.'),xpath將搜索頁面上的任何地方,包括那些不是'child'的後代的地方。 –

+0

這是一個巨大的幫助。謝謝! – James