是否可以使用XPATH和Selenium从Python中的特定div开始计数?

是否可以使用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

我有80个div,每个div(在我们的例子中,24、27、30类)包含2个孩子

是否可以从第24行开始计数(不包括儿童),然后继续计数下面的行?(仅使用XPATH,不使用CSS选择器;)


... # 圆点表示前面的刻度
... # 在它之后
是否有类似于:

比如说:

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"))