2017-08-25 58 views
0

我想從使用Python 3和Selenium的頁面中選擇一個特定的元素。如何最好地選擇正確的元素(Python 3,Selenium)

該頁面包含一個長長的清單(包括幾百個項目),這些所有格式就像這樣:

enter image description here

此表的HTML如下:

enter image description here

而當我展開我試圖點擊的特定項目的元素時,它看起來像這樣(鏈接被遮蓋隱私):

enter image description here

我迄今已做的是搜索元素我需要使用

titleField = 'Zombie Apocalypse' 
searchBuilder = "//*[contains(text(), '" + titleField + "')]" 
searchForBook = browser.find_elements_by_xpath(searchBuilder) 
searchForBook[0].click() 

其中一些工作的時間。當有兩個同名的項目,或者標題中有撇號時,我遇到了問題,有時我無法弄清楚它爲什麼根本不起作用。

是否有更好的方式從表中選擇一個單獨的元素比我使用的方式?我會提前標題的項目,但不是身份證號碼。身份證號碼是我試圖抓取的信息。

如果搜索返回該項目的URL,我也可以,因爲ID號碼包含在該URL中,所以我可以從那裏拉它。但標題不在URL中,所以我不知道如何搜索它。

+0

它可能只是刮在表內的ID號字段?這樣你就可以得到所有的ID號碼加上它看起來相對一致。除非你正在尋找特定的物品,那麼我建議只抓住表格中的每個網址並獲取其名稱字段以便與您自己進行比較。 – OmegaNalphA

+0

這是一個想法。通過設置表格的方式,我將如何獲取每個URL的名稱字段?我需要的只是身份證號碼,但確實需要針對特定​​項目。 – Oxymoronica

+0

如果有兩個或多個具有相同名稱的項目,您要單擊哪一個,還是要同時點擊兩個項目? – ands

回答

0

在將其插入到XPath表達式中之前,應引用該文本。這將爲xpath表達式適當地編碼yoyr字符串。請注意,「quoteattr」ed stings包括周圍的'"

from xml.sax.saxutils import quoteattr 
titleField = quoteattr('Zombie Apocalypse') # But may contain XML markup chars 
searchBuilder = "//*[contains(text(), " + titleField + ")]" 
searchForBook = browser.find_elements_by_xpath(searchBuilder) 
searchForBook[0].click() 
+0

我現在不在我的計算機上,但是我一會兒就會給你提供的錯誤信息。這可能是正確的道路上。 – Oxymoronica