功能:
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()