【问题标题】:Using Python Selenium, how to do click on a webElement of webElements?使用 Python Selenium,如何点击 webElements 的 webElement?
【发布时间】:2021-01-11 16:02:43
【问题描述】:

我已经弄清楚了如何使用这个 Stack Overflow 帖子在 python 中使用 Selenium 查找元素的子元素。

Selenium Get WebElement inside a WebElement

我想更进一步。我希望能够对子元素执行操作。离开前面的例子:

<div class='wrapper'>
  <div class='insider1'>
  <div class='insider2'>
<div class='wrapper'>
  <div class='insider1'>
  <div class='insider2'>

我正在尝试做类似的事情

elements = driver.find_elements_by_xpath('//div')
for element in elements:
    sub_element = element.find_element_by_xpath('//div')
    if sub_element.is_displayed()
        ActionChains(driver) \
            .move_to_element(sub_element ) \
            .click(sub_element ) \
            .perform()

是的,在这个例子中我可以只做 sub_element.click() 但我想做更多类型的交互。

该示例无法找到元素子元素。如果我输入 ActionChains(element) 而不是 ActionChains(driver),代码会抛出错误,因为元素是 webElement 而不是 webDriver。

【问题讨论】:

    标签: python html selenium


    【解决方案1】:

    首先你必须关闭你的html标签:

    <div class='wrapper'>
      <div class='insider1'></div>
      <div class='insider2'></div>
    </div>
    <div class='wrapper'>
      <div class='insider1'></div>
      <div class='insider2'></div>
    </div>
    

    为了选择内部标签,我使用了这段代码:

    outers = driver.find_elements_by_xpath('//div[@class="wrapper"]')
    
    for outer in outers:
        inners = outer.find_elements_by_xpath('./child::div')
        for inner in inners:
            print(inner)
    

    您指定外部 div 的类:

    '//div[@class="wrapper"]'
    

    这样您就不会意外选择内部的,因为我认为您的代码会发生这种情况。然后你选择所有的外部子元素是 div 的:

    './child::div'
    

    【讨论】:

    • 您在关闭标签上是对的。我应该抓住那个。我认为我的重点更多是在确定内部元素后对所选元素执行操作,例如单击。您在找到内部元素方面做得很好,但之前的 StackOverflow 帖子(超链接)已经涵盖了这一点。我需要帮助更进一步。
    • 你有没有试过像这样把父元素放入move_to_element:ActionChains(driver).move_to_element(element).click(sub_element).perform()
    • 我刚试过ActionChains(driver).move_to_element(element).click(sub_element).perform(),但我得到的错误是(JavascriptException)Message: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite
    • 我认为错误在于您的 xpath 不确定。因此,您使用的 xpath 不仅仅指向一个元素,而是指向多个元素。尝试确认您的 xpath 仅指向一个元素。并尝试设置等待条件:time.sleep(3)。
    • 函数find_element_by_xpath 只返回匹配元素的第一个匹配项。所以我不确定这是否是问题所在。即使网站已完全加载,它也会出现错误。但这些都是很好的建议。
    猜你喜欢
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2019-02-24
    • 2019-08-09
    • 2018-05-14
    相关资源
    最近更新 更多