Python中出现错误“其他元素将获得点击”

时间:2018-09-19 07:18:26

标签: python-3.x selenium selenium-webdriver webdriver webdriverwait

我试图单击这样的链接:

<div class="loading" style="display:none;">
<p class="btn blue"><span>さらに表示</span></p>
<a href="javascript:void(0);" onclick="get_more();"></a>
</div>

我使用了这段代码:

element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector(".btn.blue"))  # @UnusedVariable
element.click()

我遇到这样的错误,该怎么办?

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <p class="btn blue">...</p> is not clickable at point (391, 577). Other element would receive the click: <a href="javascript:void(0);" onclick="get_more();"></a>
(Session info: headless chrome=69.0.3497.100)
(Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 6.1.7601 SP1 x86_64)

3 个答案:

答案 0 :(得分:4)

您尝试单击的元素已被其他元素覆盖,因此该元素获得点击而不是点击实际元素。可能存在以下情况:

  • 案例1 。可以说它是一个加载器,它是在元素获得加载并在一段时间后变得不可见时出现的。

    解决方案:在这里,您必须等待加载程序变得不可见,然后才能单击实际元素

    $translate.instant('MINLENGTH', { element: element, value: minlength })
  • 案例2 。如果使用浏览器尺寸,则实际元素不可见,并被某些叠加元素覆盖。

    解决方案::在这里,您需要滚动到所需的元素,然后必须执行点击操作

    from selenium.webdriver.support import expected_conditions as EC
    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.invisibility_of_element_located((By.ID, 'loader_element_id')))
    element_button = wait.until(EC.element_to_be_clickable((By.ID, 'your_button_id')))
    element_button.click()
    

    使用OR可以像这样使用from selenium.webdriver.common.action_chains import ActionChains element = driver.find_element_by_id("your_element_id") actions = ActionChains(driver) actions.move_to_element(element).perform()

    execute_script

或使用JavaScript进行点击

driver.execute_script("arguments[0].scrollIntoView();", element)

注意:如果需要,请根据Python语法进行必要的更正。

答案 1 :(得分:0)

您可以使用操作类来单击您的元素,

from selenium.webdriver import ActionChains

actions = ActionChains(driver)
actions.move_to_element(element).click().perform()

答案 2 :(得分:0)

根据 HTML 和您的代码试验,您尝试单击<span>标记,而不是尝试调用click()<a>标签上,如下所示:

  • 使用css_selector

    element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_css_selector("div.loading a[onclick^='get_more']"))
    element.click()
    
  • 使用xpath

    element = WebDriverWait(driver, 30).until(lambda x: x.find_element_by_xpath("//p[@class='btn blue']/span[contains(.,'さらに表示')]//following::a[contains(@onclick,'get_more')]"))
    element.click()