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使用的Xpatha=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