【问题标题】:Selecting all the child elements using the XPath to display in Selenium, Python使用 XPath 选择所有子元素以在 Selenium、Python 中显示
【发布时间】:2020-09-01 07:44:04
【问题描述】:

如何选择特定父元素的所有子元素并循环显示?

我应该参考文档了解使用哪些方法? 谢谢。

<div class="Pitch-sc-1mctasb-0 mPWDj"><div class="Pitch__ElementRow-sc-1mctasb-1 Pitch__PitchRow-sc-1mctasb-2 bjBvcU"><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0_1-66.webp 66w,
        /dist/img/shirts/standard/shirt_0_1-110.webp 110w,
        /dist/img/shirts/standard/shirt_0_1-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0_1-66.png" srcset="
        /dist/img/shirts/standard/shirt_0_1-66.png 66w,
        /dist/img/shirts/standard/shirt_0_1-110.png 110w,
        /dist/img/shirts/standard/shirt_0_1-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Goalkeeper" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">GKP</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0_1-66.webp 66w,
        /dist/img/shirts/standard/shirt_0_1-110.webp 110w,
        /dist/img/shirts/standard/shirt_0_1-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0_1-66.png" srcset="
        /dist/img/shirts/standard/shirt_0_1-66.png 66w,
        /dist/img/shirts/standard/shirt_0_1-110.png 110w,
        /dist/img/shirts/standard/shirt_0_1-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Goalkeeper" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">GKP</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"></div></div><div class="Pitch__ElementRow-sc-1mctasb-1 Pitch__PitchRow-sc-1mctasb-2 bjBvcU"><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Defender" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">DEF</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Defender" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">DEF</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Defender" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">DEF</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Defender" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">DEF</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Defender" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">DEF</span></abbr></div></button></div></div><div class="Pitch__ElementRow-sc-1mctasb-1 Pitch__PitchRow-sc-1mctasb-2 bjBvcU"><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Midfielder" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">MID</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Midfielder" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">MID</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Midfielder" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">MID</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Midfielder" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">MID</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Midfielder" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">MID</span></abbr></div></button></div></div><div class="Pitch__ElementRow-sc-1mctasb-1 Pitch__PitchRow-sc-1mctasb-2 bjBvcU"><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Forward" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">FWD</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Forward" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">FWD</span></abbr></div></button></div><div class="Pitch__PitchUnit-sc-1mctasb-3 jDkpw"><button class="PitchPlaceholder__StyledPlaceholder-sc-1jzdtaz-0 jEoHLb"><picture><source type="image/webp" srcset="
        /dist/img/shirts/standard/shirt_0-66.webp 66w,
        /dist/img/shirts/standard/shirt_0-110.webp 110w,
        /dist/img/shirts/standard/shirt_0-220.webp 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px"><img src="/dist/img/shirts/standard/shirt_0-66.png" srcset="
        /dist/img/shirts/standard/shirt_0-66.png 66w,
        /dist/img/shirts/standard/shirt_0-110.png 110w,
        /dist/img/shirts/standard/shirt_0-220.png 220w
        " sizes="(min-width: 1024px) 55px, (min-width: 610px) 44px, 33px" alt="" class="Shirt__StyledShirt-k5q8zl-0 hoGPkp"></picture><div data-testid="title" class="PitchPlaceholder__Title-sc-1jzdtaz-1 gAiHPL">Add <abbr title="Forward" class="PitchPlaceholder__Abbr-sc-1jzdtaz-2 ffGrvw"><span class="PitchPlaceholder__Span-sc-1jzdtaz-3 cVbLKM">FWD</span></abbr></div></button></div></div></div>

主 div 类:Pitch-sc-1mctasb-0 mPWDj,有 4 个 div 子元素,在这些子元素下还有更多的子元素。我想单独获取 XPATH 并将它们显示在正确的 div 父级下。

【问题讨论】:

标签: python python-3.x selenium selenium-webdriver webdriver


【解决方案1】:

您应该使用find_elements() 来获取元素列表。

注意:在遍历元素列表时,您会得到StaleElementReferenceException,因此您必须处理异常。

供您使用:

lst_of_el = driver.find_elements_by_css_selector("div[class^='Pitch-sc'] div")

【讨论】:

    【解决方案2】:

    您可以使用WebElement.&lt;Locator Strategy&gt;("&lt;Locator&gt;") 方法获取所有子元素。如果你这样做,就像共享 HTML 一样:

    parent = driver.find_element_by_xpath("//div[@class='Pitch-sc-1mctasb-0 mPWDj']") #As class has compound string css selector is failing, used xpath
    children = parent.find_elements_by_tag_name("div")
    print(len(children))
    

    由于 div 内共有 36 个 div,类名为 `Pitch-sc-1mctasb-0 mPWDj。它将打印 36。

    如果您只想过滤选择性子 div,请相应地修改您的定位器。如下所示只会选择 15 个以 data-testid 作为标题的 div:

    parent = driver.find_element_by_xpath("//div[@class='Pitch-sc-1mctasb-0 mPWDj']")
    children = parent.find_elements_by_xpath("//div[@data-testid='title']")
    print(len(children))
    

    【讨论】:

    • 感谢您的回复。但是,它不会找到或识别元素。它给出了 NoSuchElementException。我该如何解决这个问题?
    • 你能在这里复制你的 HTML 而不是图像吗?这样我就很容易复制了。
    • 我已将其添加到主要问题中。另外,在代码下面,我已经解释了我想要的东西。谢谢。
    • 查看我给出的2个例子的更新答案,我希望它现在可以澄清你的疑惑
    • def Pick_players(self): parent = self.driver.find_element_by_xpath("//div[@class='Pitch-sc-1mctasb-0 mPWDj']") childrenElements = parent.find_elements_by_xpath(" //div[@data-testid='title']") for childrenElements: children.click() while TRUE: if self.getFundsRemaining()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2012-07-18
    相关资源
    最近更新 更多