簡體   English   中英

在多個位置使用find_elements_by_xpath

[英]Using find_elements_by_xpath with multiple positions

這是HTML代碼段:

<section class="node_category" id="kui_3_1515304072474_68">
    <h3 class="">User details</h3>
<ul class="" id="kui_3_1515304072474_67">
<li class="contentnode" id="kui_3_1515304072474_66">
<dl id="kui_3_1515304072474_65">
<dt class="">Country
</dt>
<dd class="" id="kui_3_1515304072474_64">United States
</dd>
</dl></li>
<li class="contentnode">
<dl>
<dt class="">City/town
</dt>
<dd class="">Somewhere
</dd>
</dl></li>
<li class="contentnode" id="kui_3_1515304072474_76">
<dl id="kui_3_1515304072474_75">
<dt class="">Company
</dt>
<dd class="" id="kui_3_1515304072474_74">ABC Inc
</dd>
</dl></li>
</ul></section>

我想通過XPath從以下HTML類提取文本:

/ul/li[@class='contentnode'][3]/dl/dd

對於其他頁面,此“ contentnode”類具有從1到最大6的多個位置。 在此示例中,最大值為3。要指定所有位置,我按如下方式構造XPath:

//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd

現在,我像下面這樣插入我的Python代碼:

from selenium import webdriver


lst=[]
browser = webdriver.Chrome('./path')
url = "https://<target URL>"
browser.get(url)
contents = browser.find_elements_by_xpath("//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd")

for t in contents:

    lst.append([t.text])

print(lst)

但是,輸出僅顯示位置1。它應顯示位置1到6的所有文本。

[編輯]我也嘗試過

//li[@class='contentnode'][contains(@id,'kui_3')]/dl/dd

但仍然無法正常工作。 它沒有顯示任何錯誤,但是沒有任何結果。

我的代碼有什么問題?

這是您需要的工作代碼:

from selenium import webdriver


lst = []
browser = webdriver.Chrome()
browser.get("https://<target URL>")

contents = browser.find_elements_by_xpath("//li[@class='contentnode'][1 <= position() and position() < 7]/dl/dd")

for t in contents:

    lst.append(t.text)

print(lst)

browser.quit()

結果將是(根據您的HTML):

['United States', 'Somewhere', 'ABC Inc']

希望對您有幫助!

試試下面的代碼

from selenium import webdriver

lst=[]
browser = webdriver.Chrome('./path')
url = "https://<target URL>"
browser.get(url)
contents = browser.find_elements_by_xpath("//li[@class='contentnode']/dl/dd")
print len(contents)

for t in contents:
    lst.append(t.text)

print(lst)

您嘗試使用CSS選擇器嗎? 如果沒有,那么您應該嘗試一下:

for items in browser.find_elements_by_css_selector(".contentnode"):
    data = ' '.join([' '.join(item.text.split()) for item in items.find_elements_by_css_selector("dd")])
    print(data)

暫無
暫無

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

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