Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何提取所有<;李>;根据<;ul>;_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

Python 如何提取所有<;李>;根据<;ul>;

Python 如何提取所有<;李>;根据<;ul>;,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我想提取我尝试过的下的所有元素文本 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>

我想提取我尝试过的
下的所有
  • 元素文本

    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>
    
    
    特点:

    • 易于喷涂
    • 优异的粘接性能
    • 单包
    • 在施工现场与清洁饮用水混合
    以下是网站的详细信息


    怎么做?有什么建议吗?

    实际上,您正在试图找到
    p
    b
    标记后面的路径。看起来像这样

    <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>
    
    工作代码供参考

    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)
    
    输出


    没有包含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
    

    您可能想提取所有
  • 元素的文本,这些文本与
    标签相关,标签的文本为A/D TC-55 SEALER,为了实现这一点,您可以使用以下任一方法:

    • 使用
      CSS\u选择器

      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
      

    删除
    /p/b
    这是不需要的。或者将此用作css选择器-
    #borderForGrid>div.left.width50>ul
    @Kaushik如何使用
    css选择器
    驱动程序。通过css选择器(“#borderForGrid>div.left.width50>ul”)查找元素。
    读取alsoI使用的Xpath
    a=driver。通过Xpath('/*[@id=“borderForGrid”]/div[1]/ul')
    查找元素,但是它有“”元素,对于您的种类信息,该页面包含重复的
    id
    ,这在正常网页中不是预期的事情。这给出了正确的答案,但是如何对整个产品列表重复此内容,我是否应该为每个项目更改
    /*[@id=“borderForGrid”]/div[2]/ul
    ?考虑您的解决方案
    打印([my_elem.get_属性(“innerHTML”)用于WebDriverWait(驱动程序,5)中的my_elem.get_属性。直到(位于的所有元素的可见性((By.XPATH,//h5//a[text()='a/D TC-55 SEALER']//following::div[1]//ul li”))
    如果文本是
    A/D TC-55 SEALER
    如果我想将其用于其他文本,如
    CARBOCRYLIC 3356-1
    @deepesh请注意您提供的HTML,它专门指向A/D TC-55 SEALER部分。这就是我的答案。很高兴您得到了一个可接受的解决方案。谢谢@DebanjanB!,我使用hi解决了我的问题来自Kaushik的nts答案,但当这些列表为空时,它似乎不起作用。所以我开始使用您的解决方案,它特别使用文本名称。
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC