如何解决元素在Selenium中使用Python无法单击



我正在测试一个脚本,其中我运行了大约 200 页。每个页面都包含一个我需要单击的编辑按钮。在大约一半的页面中,这成功完成了,但在另一半页面中,我收到一个错误,指出另一个元素将收到点击。

我知道为什么会产生错误,但我不知道如何解决它。

有一个选项卡有时会完全阻止编辑按钮(取决于页面的长度/宽度以及编辑按钮的位置)。

不可点击 可点击

我已经就类似的问题尝试了很多不同的建议,但是我尝试过的都没有对我有用。尤其是这些建议似乎很有希望:

调试"元素在点上不可单击"错误

编辑按钮的 HTML

<div class="aikis-task-portlet-buttons-panel-button" style="">  
<input type="button" value="Edit" 
onclick="_aikistaskgeneric_WAR_aikistaskportlet_INSTANCE_6mbS_openFlashEditMode()" style="width: 85px">     
</div>

挡路的选项卡的 HTML

<div id="userVoicelink" onclick="__displayUserVoicePanel()">    
Suggestions for improvement
</div>

问:是否有可能以某种方式使其不可见?

我目前的代码是:

edit_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Edit']")))
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
edit_button.click()

生成的异常是:

ERROR:root:Message: unknown error: Element <a data-toggle="tab" href="#settings">...</a> is not clickable at point (352, 31). Other element would receive the click: <div id="curtain" style="opacity: 0.301426;">...</div>

通过使用driver.execute_script("window.scrollTo(0, 350)")并将"350"更改为不同的值,我能够使某些按钮可单击。问题是编辑按钮不在所有页面上的同一位置。一种解决方案是使用该函数进行循环,增加 Y 值,同时检查按钮是否可单击/可见。所以我尝试了,但以下代码产生以下错误:

y = 350
driver.execute_script("window.scrollTo(0, y)") 

Web 驱动程序异常: 未知错误: y 未定义

问:是否可以获取按钮的坐标,然后使用driver.execute_script("arguments[0].scrollIntoView();", edit_button)driver.execute_script("window.scrollTo(0, 350)")但是偏移位置,使其在编辑按钮下方略微滚动?

顺便说一句,我正在使用chromedriver,但是在尝试壁虎驱动程序时遇到了同样的问题。

关于您上一条错误消息,在我看来,您没有设置 y 值,而只是设置字符"y"。假设你使用的是Python 3,这应该可以解决这个问题:

y = 350
driver.execute_script(f"window.scrollTo(0, {y})")

更"直接",虽然不那么pythonic是:

y = 350
driver.execute_script("window.scrollTo(0, " + str(y) +")")

编辑:根据可能的重复项,您还可以尝试修改代码以通过JavaScript单击按钮:

edit_button = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Edit']")))
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
driver.execute_script("arguments[0].click();", edit_button)

最新更新