【问题标题】:No such element: Unable to locate element error while clicking on a button using Selenium and Python没有这样的元素:使用 Selenium 和 Python 单击按钮时无法定位元素错误
【发布时间】:2020-11-22 21:12:54
【问题描述】:

我是 selenium 的新手,我正在尝试编写一个代码,该代码将弹出一个项目以在二手网站上出售。 一切正常,直到我试图找到弹出按钮。

网站中的html代码是这样的:

这是我代码中的一行:

pop_up = driver.find_element_by_xpath(("//*[@id='bounceRatingOrderBtn']")).click()

我花了几个小时试图找到解决方案,但没有任何结果。

【问题讨论】:

  • 欢迎您!可以分享一下网站的链接吗?
  • 添加示例链接。
  • 谢谢你们!这是一个名为 Yad2 的以色列网站,这是链接 - yad2.co.il

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

弹出按钮是否出现在不同的框架或新窗口中?检查并根据需要切换到框架或新窗口,然后对按钮执行操作。

我对python selenium不熟悉,框架和窗口切换的java selenium代码可以给,请理解逻辑/代码,自己找python版本的代码。

帧切换的Java版本代码-

driver.switchTo().frame("yournewframename");

窗口切换的Java版本代码-

        for(String handle:driver.getWindowHandles()) 
        {
            String windowtitle = driver.switchTo().window(handle).getTitle();
            if(windowtitle.contains("your new pagetitle"))
            {
                System.out.println("Title after switching "+driver.getTitle());
                break;  
            }
        }

【讨论】:

  • 我认为这是新框架,但我无法使用 src 切换到它,而且它没有名称或 ID,你知道吗?谢谢!
  • 你可以使用索引切换到框架,试试看。 driver.switch_to.frame(索引号)
【解决方案2】:

我认为Parthasiad是框架相关的问题,我只是添加了python版本的框架之间的切换:

driver.switch_to.frame('在这里找到你的其他框架元素') driver.switch_to.default_content()

【讨论】:

  • 我认为这是新框架,但我无法使用 src 切换到它,而且它没有名称或 ID,你知道吗?谢谢!
【解决方案3】:

所需的元素是AJAX 元素,因此要单击该元素,您必须将WebDriverWait 诱导为element_to_be_clickable(),并且可以使用以下Locator Strategies 之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#bounceRatingOrderBtn[name='bounceRatingOrderBtn']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@id='bounceRatingOrderBtn' and @name='bounceRatingOrderBtn']"))).click()
    
  • 注意:您必须添加以下导入:

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

参考

您可以在NoSuchElementException 上找到一些相关讨论:

【讨论】:

  • 非常感谢您的回答!当我同时使用 xpath 和 css_selecrot 尝试此操作时,我收到错误 selenium.common.exceptions.TimeoutException: Message: 你知道为什么吗?谢谢!
猜你喜欢
  • 2019-06-29
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多