簡體   English   中英

無法使用python中的硒中的find_elements_by_xpath檢索元素列表

[英]Unable retrieve a list of elements using find_elements_by_xpath in selenium using python

我試圖做一個機器人,使用它的xapth從網站上檢索鏈接列表,然后單擊所有鏈接。

中的XPath看起來是這樣的: [@class="gridicons"]/li[i]/div/ul/li/p/aili[i]是從1nn是數量鏈接存在。

該代碼段是:
urls=driver.find_elements_by_xpath('//[@id="gridicons"]/ul/li/div/ul/li/p/a')

for url in urls:
    driver.execute_script("window.open(arguments[0]);",url.get_attribute("href"))

find_elements_by_xpath返回一個列表並將其存儲在urls這可以很好地工作。 在這種情況下,如果您看一下xpath,則每個分區只有一個與之關聯的URL。 這是供參考的圖像。

但是,如果每個分區有一個以上的鏈接,則xpath會變為如下所示: //*[@class="gridicons"]/li[i]/div/ul/li[j]/p/a其中i構成塊數, j是每個塊中的鏈接數。

如果我使用代碼:

urls = driver.find_elements_by_xpath('//*[@class="gridicons"]/li/div/ul/li[1]/p/a') print(urls)

為了只檢索每個塊上的第一個鏈接,當我打印網址時,它是一個空列表。 我不明白為什么,因為檢查元素框向我顯示了URL列表,從而使xpath有效。 這是圖片。

之所以沒有收到元素列表,是因為您使用的是絕對xpath。 這意味着該xpath將導致精確到1個元素。

您需要做的是為此元素創建一個相對的xpath。 如果您要添加多個a元素的html代碼,我可以為您提供幫助。

替換相對路徑的絕對路徑(注意塊的“ li”之前的雙斜杠):

urls = driver.find_elements_by_xpath('//*@class="gridicons"]//li/div/ul/li[1]/p/a')

這應該給您所有塊<li>中的每個第一個<li>

根據WebElement單個URL的代碼塊,以下xpath可以工作:

//[@id="gridicons"]/ul/li/div/ul/li/p/a

現在,每個分區有多個鏈接,您還必須覆蓋以下xpath標識WebElements位置:

//*[@class="gridicons"]/li[i]/div/ul/li[j]/p/a

為了有效遍歷所有<li> 祖先,您可以使用以下代碼塊:

urls = driver.find_elements_by_xpath("//[@id='gridicons']/ul//li/div/ul//li/p/a")
for url in urls:
    driver.execute_script("window.open(arguments[0]);",url.get_attribute("href"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM