我一直试图让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的答案并从页面得到了这个:(第三张图片)
答案 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("DeleteSurveyOK").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, "DeleteSurveyOK")))
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("ModelSurveyForm").submit()