没有这样的元素:使用Selenium和Python单击按钮时无法找到元素错误

2024-04-19 12:37:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是selenium的新手,我正在尝试编写一个代码,可以弹出一个项目在二手网站上出售。 在我试图找到弹出按钮之前,一切都很顺利

以下是网站中html代码的显示方式:

snapshot

这是我代码中的一行:

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

我花了好几个小时试图找到一个解决办法,但什么都没有解决


Tags: 项目代码idby网站htmldriverselenium
3条回答

我认为,正如Partha提到与框架相关的问题,我只是添加了在框架之间切换的python版本:

driver.switch_to.frame('在此处找到其他框架元素') driver.switch_to.default_content()

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

我不熟悉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;  
            }
        }

所需的元素是AJAX元素,因此要单击该元素,必须为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下任一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的一些相关讨论:

相关问题 更多 >