【问题标题】:How to find the button within nested div tag through Selenium and Python?如何通过 Selenium 和 Python 在嵌套的 div 标签中找到按钮?
【发布时间】:2018-07-05 20:26:12
【问题描述】:

首先我是 Selenium for python 的新手。我的问题是: 我想找到按钮来自动点击。这是我的代码按钮:

<div class="check-button button-display">   
<div class="side-way side-way_left">
    <div class="side-button-test middle" >
        <div class="label">Click here !</div>
    </div>
</div>

我尝试:

browser.find_element_by_css_selector(".side-button-test.middle") ,但它不起作用。任何人都可以帮助我。

【问题讨论】:

  • not working 是什么意思?如果您没有具体说明问题所在,我们如何提供帮助?您遇到了哪个错误?

标签: python selenium selenium-webdriver xpath css-selectors


【解决方案1】:

用 Xpath 试试这个,

find_element_by_xpath("//div[contains(text(),'Click here !')]")

【讨论】:

  • @LoiHu 我们所说的“它不起作用”你应该提供错误堆栈以便我们可以跟踪异常。
【解决方案2】:

试试这个:

wait = WebDriverWait(browser, 20)
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'.side-button-test.middle>div')))
element.click()

请检查 iframe 是否在 iframe/frameset 中, 您将不得不像这样切换 webdriver 的焦点:

browser.switch_to.frame(web element)

如果您在完成当前帧后将驱动程序的焦点切换回主要内容,这始终是一个好习惯,您可以尝试以下代码:

browser.switch_to.defaultContent();

虽然你也可以试试这个 xpath:

//div[contains(text(),'Click here !')]

在这种情况下,代码是:

wait = WebDriverWait(browser, 20)
element = wait.until(EC.element_to_be_clickable((By.XPATH,'//div[contains(text(),'Click here !')]')))
element.click()

【讨论】:

  • 感谢您的依赖,但它不起作用。它抛出错误:消息:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“.side-button-test middle>div”}
  • 你写了这个 .side-button-test middle>div ,我给你提供了这个: .side-button-test.middle>div
  • 查看 .在 middle>div 之前,您的情况下缺少它。顺便说一句,我已经更新了我的答案,请查看。
  • 你在这个问题上投入了这么多时间,我们甚至不知道什么是问题以及 OP 有哪些错误
  • @AndreiSuvorkov:是的,没错
【解决方案3】:

根据您共享的 HTML,单击带有文本的元素 单击此处! 您需要诱导 WebDriverwait 以使 元素可单击 您可以使用以下解决方案:

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.side-way.side-way_left > div.side-button-test.middle > div.label"))).click()
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='side-way side-way_left']/div[@class='side-button-test middle']/div[@class='label'][contains(.,'Click here !')]"))).click()
    

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 2015-06-23
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多