如何提取<ul>下的所有<li>元素

时间:2019-06-03 05:40:35

标签: python selenium xpath css-selectors webdriverwait

我想提取我尝试过的<li>下的所有<ul>元素文本

elem = driver.find_elements_by_xpath(("//div[@class='left width50']/p/b/ul"))
len(elem)

给出“ 0”或空白列表。

这是html来源

<div class="left width50">
                            <p><b>Features:</b></p>
                            <ul>
                                    <li>Easy spray application</li>
                                    <li>Excellent bonding properties</li>
                                    <li>Single package</li>
                                    <li>Mixed with clean potable water at job site</li>
                            </ul>
                        </div>

HERE是网站的link

如何提出任何建议?

3 个答案:

答案 0 :(得分:2)

实际上,您正在尝试在pb标签之后找到路径。看起来像这样。

<div class="left width50">
    <p><b>Features:<ul>
            <li>Easy spray application</li>
            <li>Excellent bonding properties</li>
            <li>Single package</li>
            <li>Mixed with clean potable water at job site</li>
    </ul></b></p>

</div>

但是您的代码在HTML中是不同的。

因此,您应该环顾四周,不要使用pb标签。

这是您可以从chrome获得的快速帮助。使用f12 key转到开发人员选项,然后导航到“元素”选项卡,然后右键单击要查找的元素,然后选择选择器值。

您可以阅读更多有关找到元素here的方法的信息

如果您想使用xPath,这对您来说是正确的xpath-//*[@id="borderForGrid"]/div[1]/ul

提取过程

一旦您获得所有ul,这将帮助您获得所有li文本

all_li = all_ul_from_xpath.find_elements_by_tag_name("li")
for li in all_li:
    text = li.text
    print (text)

工作代码以供参考。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://www.carboline.com/products/")



elem = driver.find_element_by_xpath('//*[@id="borderForGrid"]/div[1]/ul')

all_li = elem.find_elements_by_tag_name("li")
for li in all_li:
    text = li.text
    print (text)

输出

enter image description here

enter image description here

答案 1 :(得分:1)

想必您想提取与<li>标签相关的所有<h5>元素文本,其文本为 A / D TC-55 SEALER ,并实现使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "li[data-brands='Southwest'][data-types='Acrylics'] div.left.width50 ul>li")))])
    
  • 使用XPATH

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//h5//a[text()='A/D TC-55 SEALER']//following::div[1]//ul//li")))])
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

答案 2 :(得分:0)

xpath中没有任何元素:

//div[@class='left width50']/p/b/ul 

left width50具有500个与之关联的Web元素。 //div[@class='left width50']/p/b

也是如此

这就是为什么在执行len()时得到0的原因。

相反,请尝试使用此xpath替换它

//a[text()='A/D Firefilm III']/../following-sibling::div[1]/descendant::li