是否可以使用XPATH和Selenium从Python中的特定div开始计数?
我有80个div,每个div(在我们的例子中,24、27、30类)包含2个孩子 是否可以从第24行开始计数(不包括儿童),然后继续计数下面的行?(仅使用XPATH,不使用CSS选择器;)是否可以使用XPATH和Selenium从Python中的特定div开始计数?,python,python-3.x,selenium,selenium-webdriver,xpath,Python,Python 3.x,Selenium,Selenium Webdriver,Xpath,我有80个div,每个div(在我们的例子中,24、27、30类)包含2个孩子 是否可以从第24行开始计数(不包括儿童),然后继续计数下面的行?(仅使用XPATH,不使用CSS选择器;) ... # 圆点表示前面的刻度 ... # 在它之后 是否有类似于: 比如说: x=0 所有的\u divs=driver。通过\u xpath(“//div/*”)查找\u元素 而x
... # 圆点表示前面的刻度
... # 在它之后
是否有类似于:
比如说:
x=0
所有的\u divs=driver。通过\u xpath(“//div/*”)查找\u元素
而x
输出:长度应为2(第27类和第30类,无子类)
非常感谢。下面是:
from lxml import etree
data = [your data above]
tree = lxml.etree.fromstring(data, parser=lxml.etree.HTMLParser())
targets = tree.xpath("*//div[(position()=2 or position()=3) and descendant::div]")
for i in targets:
for child in i.getchildren():
child.getparent().remove(child)
print(etree.tostring(i).decode().replace('\n','').strip())
输出:
<div class="27"> </div>
<div class="30"> </div>
希望这至少是您正在寻找的大致方向…事实证明,您需要位于您想要拥有兄弟姐妹的节点中(如果您想要拥有
class=“24”
,您需要位于class=“24”
节点内部
即
x=0
所有的\u divs=driver。通过\u xpath(“//div/*”)查找\u元素
而x
这将打印出除子项以外的class=“24”
下的div数。您可以使用此命令只返回大于给定数字的
的子项
相关表述为:
//div[@class='container']/child::*[number(@class)>24]
翻译成
<> P>参见更多信息代码中没有任何“子”,因此我认为用正则表达式不可能或可能考虑两个问题:首先,添加到DmitriT所说的“你没有40行X 2”;但简单地说,80行,缩进不同。第二,在你的代码中,你说(在评论中)您想排除24,但您想要的输出包括24。@Dmitri感谢您指出这一点,我已经修复了代码中的错误。@JackFleeting,正确!我已经修复了它。感谢您的提醒!这是可能的,尽管我个人只能使用lxml,不能使用selenium。如果您感兴趣,请告诉我,我会发布它。伙计谢谢!在看到你的答案之前,我自己已经找到了答案。+1为了努力,我一定会把我的答案列下来。再次感谢你,杰克!
//div[@class='container']/child::*[number(@class)>24]
divNumber = 24
interestingDivs = driver.find_elements_by_xpath(
"//div[@class='container']/child::*[number(@class)>" + str(divNumber) + "]")
for interestingDiv in interestingDivs:
print(interestingDiv.get_attribute("class"))