“元素在点(x,y)处不可点击”。隐形元素覆盖按钮

时间:2016-08-17 02:22:41

标签: javascript python selenium

我一直试图让Selenium使用Chrome Webdriver点击一个按钮,但是有一个元素<div class="modal-overlay" style="display: block;"></div>覆盖了整个页面并且是隐身的,这阻止了我的点击。我该如何解决这个问题?

我试过用这个:

element = driver.find_element_by_xpath("//input[@type='submit']")
driver.execute_script("arguments[0].click();", element)

但它不起作用。在这种情况下我该怎么办? 编辑: 我使用了luke_aus的答案并从页面得到了这个:(第三张图片)

http://imgur.com/a/MlmpK

2 个答案:

答案 0 :(得分:1)

只需使用execute_script提交表单

即可
driver.execute_script("document.getElementById('myForm').submit()");

答案 1 :(得分:1)

在你的情况下,你需要在点击提交按钮之前强制隐藏覆盖元素: -

#first make overlay element invisible 
overlay = driver.find_element_by_css_selector("div.modal-overlay")
driver.execute_script("arguments[0].style.display = 'none'", overlay)

#now find submit button and click 
driver.find_element_by_id("DeleteSurveyO‌​K").click()

Edited1 : - 如果仍然会抛出提交按钮不可见的异常,您应该尝试使用WebDriverWait等待,直到覆盖元素隐藏后提交按钮可见,如下所示:

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

#first make overlay element invisible 
overlay = driver.find_element_by_css_selector("div.modal-overlay")
driver.execute_script("arguments[0].style.display = 'none'", overlay)

#now find submit button and click 
button = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, "DeleteSurveyO‌​K")))
button.click()

Edited2 : - 如果遗憾的是提交按钮无法显示,请尝试提交表单,而不是点击提交按钮,如下所示: -

#first make overlay element invisible 
overlay = driver.find_element_by_css_selector("div.modal-overlay")
driver.execute_script("arguments[0].style.display = 'none'", overlay)

#now submit the form 
driver.find_element‌​_by_id("ModelSurveyFo‌​rm").submit()