相关文章推荐
文质彬彬的大象  ·  Spring Boot ...·  5 月前    · 
任性的鸡蛋  ·  js匿名函数传参_java ...·  11 月前    · 
踏实的蟠桃  ·  spring ...·  1 年前    · 

Selenium: 如何找到一个隐藏在<a>中的div

1 人关注

我想用Selenium来寻找一个div。

My code is :

self.browser.find_element_by_xpath('//div[@class="bh-headerBar-nav-item"]').click()

But I got the error:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class="bh-headerBar-nav-item"]"}

我应该怎样做才能找到这个div?

2 个评论
你是否申请了任何等待?
MSH
有没有可能 a 和/或 div 是在 frame 里面?
python
selenium
xpath
css-selectors
webdriverwait
Li.sili
Li.sili
发布于 2021-12-15
3 个回答
Mahad Munir
Mahad Munir
发布于 2021-12-15
0 人赞同

你可以尝试用javascript将元素的样式值改为block。

self.driver.execute_script("document.getElementsByClassName("class-name")[0].style.display = 'block';")

然后尝试访问该元素。

Max Daroshchanka
Max Daroshchanka
发布于 2021-12-15
0 人赞同

Short:

你的xpath看起来对example page html是正确的,但截图上的类以空格字符结束。(这可能是原因)。

Longer:

如果你得到 NoSuchElementException ,可能有3种情况。

  • 你的div存在于 iframe 中,所以你需要在调用find_element之前用 driver.switch_to.iframe 命令切换到iframe。

  • 类属性有时会在一些操作后发生变化,一些类可能被添加或删除。所以,请尝试使用 //div[contains(@class, 'your_class')] 。我看到,你的类在截图上以空格符结尾,这可能会影响。

  • 该元素确实不存在于页面上。 试着截图,或打印页面资源并寻找该元素,也许这将带来更多关于真正原因的信息。

  • undetected Selenium
    undetected Selenium
    发布于 2021-12-15
    0 人赞同

    The DIV 标签的后裔。 A 标签。

    要点击后裔 DIV 你可以使用以下任何一种方法 定位策略 :

  • Using css_selector :

    self.browser.find_element(By.CSS_SELECTOR, "a[href='#/sportVenueBookBC'] div.bh-headerBar-nav-item.").click()
    
  • Using xpath:

    self.browser.find_element(By.XPATH, "//a[@href='#/sportVenueBookBC']//div[@class='bh-headerBar-nav-item ']").click()
    

    然而,所需的元素是一个动态元素,所以要点击该元素,你需要诱导呼叫中心 for the element_to_be_clickable() and你可以使用以下任何一种方法定位策略:

  • Using CSS_SELECTOR:

    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href='#/sportVenueBookBC'] div.bh-headerBar-nav-item."))).click()
    
  • Using XPATH:

    WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@href='#/sportVenueBookBC']//div[@class='bh-headerBar-nav-item ']"))).click()
    
  • Note:你必须添加以下进口。

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