Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Python的Selenium中,如何解决元素在某一点上是不可单击的_Python_Selenium_Element_Execute Script - Fatal编程技术网

在使用Python的Selenium中,如何解决元素在某一点上是不可单击的

在使用Python的Selenium中,如何解决元素在某一点上是不可单击的,python,selenium,element,execute-script,Python,Selenium,Element,Execute Script,我正在测试一个脚本,其中我运行了大约200页。每个页面都包含一个我需要单击的编辑按钮。在大约一半的页面中,这是成功完成的,但在另一半页面上,我收到一个错误,表示另一个元素将接收单击 我知道产生错误的原因,但我不知道如何解决它 有时会有一个选项卡完全阻止编辑按钮(取决于页面的长度/宽度以及编辑按钮的位置) 我在类似的问题上尝试了很多不同的建议,但没有一次我尝试过的对我有用。尤其是这些建议似乎很有希望: 编辑按钮的HTML <div class="aikis-task-portlet-b

我正在测试一个脚本,其中我运行了大约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>
产生的例外情况是:

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>
WebDriverException:未知错误:未定义y

问:有没有可能先得到按钮的坐标,然后使用
driver.execute_脚本(“参数[0]。scrollIntoView();”,编辑_按钮)
driver.execute_脚本(“window.scrollTo(0350)”)
但是偏移位置,使其在编辑按钮下方稍微滚动


顺便说一句,我正在使用chromedriver,但我在尝试geckodriver时遇到了相同的问题。

关于您上次的错误消息,我认为您没有设置y值,只是设置了字符“y”。假设您使用的是Python 3,这将解决以下问题:

y = 350
driver.execute_script(f"window.scrollTo(0, {y})")
更“直接”,尽管不太像蟒蛇:

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)

非常感谢。成功了。我将做一个循环,看看我是否可以解决这个问题当然,请标记为答案,如果它工作…当然!只要我解决了这个问题。你对我写循环有什么建议吗。我被抛出了循环,因为它会立即触发
,在点(482630)不可点击。其他元素将收到click:
异常。执行时,在循环内部
edit_button=WebDriverWait(driver,1)。直到(EC.element_to_可单击((By.XPATH,“//input[@value='edit']))
edit_按钮。单击()
是否可以检索编辑按钮的y坐标值(如何?)
y\u value\u of theu edit=检索y值的函数
y\u offset=y\u value\u of u edit+10
驱动程序。执行脚本(f“window.scrollTo(0,{y\u offset})”
编辑按钮。单击()
Mhh,您是否尝试过标记为重复的问题中的建议?具体来说,我将开始更改
编辑按钮。单击()
驱动程序。执行脚本(“参数[0]。单击();”,编辑按钮)
如果您仍然需要帮助,请提供帮助。具体地说,如果您提供一个可与脚本一起使用的最小HTML页面,它将有所帮助。这一切都应该在一个
标签内,并且只包括重现问题所需的部分。此外,还包括一个完整的、可运行的python脚本,该脚本演示了如何使用selenium。
y = 350
driver.execute_script(f"window.scrollTo(0, {y})")
y = 350
driver.execute_script("window.scrollTo(0, " + str(y) +")")
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)