如何解决 element is not clickable at point in Selenium using Python
How to solve element is not clickable at point in Selenium using Python
我正在测试一个 运行 大约 200 页的脚本。每个页面都包含一个我需要单击的编辑按钮。在大约一半的页面中,这是成功完成的,但在另一半中,我收到一条错误消息,指出另一个元素将收到点击。
知道为什么会报错,但是不知道怎么解决。
有一个选项卡有时会完全挡住编辑按钮(取决于 long/wide 页面的方式和编辑按钮的位置)。
Not clickable
Clickable
我在类似问题上尝试了很多不同的建议,但我尝试过的没有一个对我有用。特别是这些建议似乎很有希望:
Debugging "Element is not clickable at point" error
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 值,同时检查按钮是否为 clickable/visible。所以我试过了,但是下面的代码产生了以下错误:
y = 350
driver.execute_script("window.scrollTo(0, y)")
WebDriverException: 未知错误: y 未定义
问:是否可以获取按钮的坐标,然后使用例如
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
要么
driver.execute_script("window.scrollTo(0, 350)")
但是偏移位置,以便它会稍微滚动到编辑按钮下方?
顺便说一句,我正在使用 chromedriver,但在尝试 geckodriver 时遇到了同样的问题。
关于您的上一条错误消息,在我看来您没有设置 y 值,而只是设置字符 "y"。假设您使用的是 Python 3,这应该可以解决:
y = 350
driver.execute_script(f"window.scrollTo(0, {y})")
更多 "direct",尽管少一些 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)
我正在测试一个 运行 大约 200 页的脚本。每个页面都包含一个我需要单击的编辑按钮。在大约一半的页面中,这是成功完成的,但在另一半中,我收到一条错误消息,指出另一个元素将收到点击。
知道为什么会报错,但是不知道怎么解决。
有一个选项卡有时会完全挡住编辑按钮(取决于 long/wide 页面的方式和编辑按钮的位置)。
Not clickable Clickable
我在类似问题上尝试了很多不同的建议,但我尝试过的没有一个对我有用。特别是这些建议似乎很有希望:
Debugging "Element is not clickable at point" error
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 值,同时检查按钮是否为 clickable/visible。所以我试过了,但是下面的代码产生了以下错误:
y = 350
driver.execute_script("window.scrollTo(0, y)")
WebDriverException: 未知错误: y 未定义
问:是否可以获取按钮的坐标,然后使用例如
driver.execute_script("arguments[0].scrollIntoView();", edit_button)
要么
driver.execute_script("window.scrollTo(0, 350)")
但是偏移位置,以便它会稍微滚动到编辑按钮下方?
顺便说一句,我正在使用 chromedriver,但在尝试 geckodriver 时遇到了同样的问题。
关于您的上一条错误消息,在我看来您没有设置 y 值,而只是设置字符 "y"。假设您使用的是 Python 3,这应该可以解决:
y = 350
driver.execute_script(f"window.scrollTo(0, {y})")
更多 "direct",尽管少一些 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)