功能:
def twoclicks(idoutter,idinner):
wait = WebDriverWait(driver, 20)
wait.until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id," + idoutter + ") and @value='...']"))).click()
sleep(5)
wait.until(EC.element_to_be_clickable((By.ID, idinner))).click()
此函数用于单击一个元素,几秒钟后弹出,然后单击弹出窗口中的一个元素。
尽管我尝试在函数中添加 sleep()
,但我不断收到该错误,但它不一致,因为我有时会得到它,而其他时候却不会。
我以前的功能是:
def twoclicks(idoutter,idinner):
outter = driver.find_element_by_xpath("//input[contains(@id," + idoutter + ") and @value='...']")
outter.click()
sleep(10)
driver.find_element_by_id(idinner).click()
sleep(7)
虽然我的第二个函数是一个不好的做法,第一个函数应该是一个改进,但我没有使用第二个函数得到该异常。我如何调整我的第一个共享函数以消除该错误。
请注意,代码是对类似函数的连续调用,例如:
twoclicks("'button1'", 'button2')
twoclicks("'button3'", 'button4')
div 是模糊的:
<div class="rich-mpnl-mask-div-opaque rich-mpnl-mask-div" id="PWBFormID:managerModalPanelDiv" style="z-index: -1;"><button class="rich-mpnl-button" id="PWBFormID:managerModalPanelFirstHref"></button></div>
它在 html 中呈灰色(检查时)。
我看到了很多方法,比如使用 execute_script()
来阻止带有上面共享类的 div,但问题是我正在为其使用一个函数,并且有几十个按钮没有这个问题或者可能与不同的类有关,这使得在我的 twoclicks()
函数之外不手动为它们单独编写代码而摆脱这种情况非常困难。
最佳答案
您可以尝试等待 Javascript 完成。尝试下面的等待方法:
def waitforload():
wait.until(lambda d: d.execute_script(
'return (document.readyState == "complete" || document.readyState == "interactive")'))
def twoclicks(idoutter, idinner):
wait.until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id," + idoutter + ") and @value='...']"))).click()
waitforload()
wait.until(EC.element_to_be_clickable((By.ID, idinner))).click()
waitforload()
关于python - 元素不可点击,因为另一个元素遮挡了它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54638683/