![](/img/trans.png)
[英]Second iterative of find_elements_by_xpath gives error in selenium python
[英]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.