Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Selenium 如何使用xpath获取HTML的以下同级或子级_Selenium_Xpath_Screen Scraping - Fatal编程技术网

Selenium 如何使用xpath获取HTML的以下同级或子级

Selenium 如何使用xpath获取HTML的以下同级或子级,selenium,xpath,screen-scraping,Selenium,Xpath,Screen Scraping,我有一些HTML我正在努力刮。努力学习硒。我需要的是“时尚”、“长”等词。 我试过: style = driver.find_element_by_xpath("//strong[text()='Style:']/following::strong").text style = driver.find_element_by_xpath("//strong[text()='Style:']/following-sibling::strong").tex

我有一些HTML我正在努力刮。努力学习硒。我需要的是“时尚”、“长”等词。 我试过:

 style = driver.find_element_by_xpath("//strong[text()='Style:']/following::strong").text

 style = driver.find_element_by_xpath("//strong[text()='Style:']/following-sibling::strong").text

 style = driver.find_element_by_xpath("//strong[contains(.,'Style:')] /preceding-sibling::strong").text
以及介于两者之间的一切

 <div class="xxkkk20">
 <strong>Style:</strong> Fashion <br>             
 <strong>Shirt Length:</strong> Long <br>
 <strong>Collar:</strong> Scoop Neck <br>
 <strong>Material:</strong> Polyester <br>  
 <strong>Pattern Type:</strong> Floral,Skulls <br>
 <strong>Embellishment:</strong> Lace <br>
 <strong>Thickness:</strong> Standard <br>
 <strong>Fabric Stretch:</strong> High Stretch <br>
 <strong>Seasons:</strong> Summer <br>
 <strong>Weight:</strong> 0.1700kg <br>
 <strong>Package Contents:</strong> 1 x Tank Top         
 </div>

风格:时尚
衬衫长度:
衣领:大圆领
材料:聚酯
图案类型:花卉、头骨
装饰:蕾丝
厚度:标准
织物弹性:高弹性
季节:夏季
重量:0.1700kg
包装内容物:1个罐顶
您可以将所有元素存储在如下所示的列表中,并在列表中迭代以获取所有web元素,最后应用text方法提取文本

all_elements = driver.find_elements(By.XPATH, "//div[@class='xxkkk20']/strong")
for ele in all_elements:
   print(ele.text)
更新1:

keys = driver.find_elements(By.XPATH, "//strong")
for key in keys: 
  print(key.get_attribute('innerHTML'))
说明:
首先,获取父
div
元素中的所有文本。
然后根据

元素将其拆分为
\n

现在,您实际上应该有两对文本,如
Style:Fashion

由于您只想获得第二个值,因此需要拆分每一对并获得第二个子字符串。
我建议在成对字符串中的第一个和第二个文本之间有一个空格。
如果没有空格,您仍然可以最后通过
将其拆分,因此它将如下所示:

pairs = driver.find_elements(By.XPATH,'//div[@class="xxkkk20"]')text.split("\n")
for pair in pairs:
    texts = pair.split(":")
    print(texts[1])

试试这个

textValues = driver.find_elements_by_xpath('//div[@class="xxkkk20"]')text.split("\n")
for txt in textValues:
    print(txt.split(":")[1].strip())


刚刚印了钥匙。我需要钥匙后面的东西。谢谢。@tejas:查看Update1部分我无法获取文本。拆分(“\n”)它给了我一个属性errion在
pairs=driver之后的
pairs
中看到了什么。查找元素(By.XPATH,//div[@class=“xxkkk20”]”)。文本
?如果没有
.split(“\n”)
如果它是
null
可能您缺少了一些等待/延迟,或者元素在iframe中?我得到:indexer:list索引超出范围。不,我是在问:如果这样做:
pairs=driver.find_元素(By.XPATH,//div[@class=“xxkkk20”]).text
变量对的内容是什么<代码>对应该包含父
div
element中的全部文本。我在棋盘的帮助下玩了更多的东西,得到了这个:material=[material]print(material)这是我得到的输出:['款式:时尚\n短款:长款\n厚款:大圆领\n材质:聚酯纤维\n款式类型:花卉,头骨\n肚皮:花边\n厚度:标准\n面料拉伸:高拉伸\n季节:夏季\n重量:0.1700kg\n包装内容物:1件背心']
textValues = driver.find_elements_by_xpath('//div[@class="xxkkk20"]')text.split("\n")
for txt in textValues:
    print(txt.split(":")[1].strip())