Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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 硒罐';不要单击图元,因为其他图元会将其遮挡_Python_Selenium_Element - Fatal编程技术网

Python 硒罐';不要单击图元,因为其他图元会将其遮挡

Python 硒罐';不要单击图元,因为其他图元会将其遮挡,python,selenium,element,Python,Selenium,Element,设置 我使用Python3.x和Selenium填写一个查询字段,然后单击搜索按钮 # element containing the product search bar and buttons search_area = el_id('Products').find_element_by_class_name('searchArea') # insert name of file to be duplicated name_field = search_area.find_element_b

设置

我使用Python3.x和Selenium填写一个查询字段,然后单击搜索按钮

# element containing the product search bar and buttons
search_area = el_id('Products').find_element_by_class_name('searchArea')

# insert name of file to be duplicated
name_field = search_area.find_element_by_xpath("//input[@type='text']")
name_field.clear()
name_field.send_keys('to_be_duplicated')  

# click search button
search_area.find_element_by_xpath('span/a[1]').click()
其中
el\u id(x)=浏览器。通过\u id(x)查找\u元素。


问题

执行上面的代码会产生以下错误

ElementClickInterceptedException: Element <a class="button button-fleft searchButton" href="#"> is not clickable at point (577.6166763305664,225.06666564941406) because another element <div class="blockUI blockOverlay"> obscures it
但是我用不同的方法解决它,所以我遵循并做了下面的事情

# click search button
search_button = search_area.find_element_by_xpath('span/a[1]')
WebDriverWait(driver, 10).until_not(EC.visibility_of_element_located((By.XPATH, 
"//*[@id="Products"]/tbody/tr[1]/td/div/input")))
search_button.click()
但我也犯了同样的错误

我也试过了,但同样的错误


如何解决这个问题?

有几种方法可以做到这一点,其中一种方法是使用Javascript executor

你可以说:

element = driver.find_element_by_xpath("//div[@class='blockUI blockOverlay']")

driver.execute_script("arguments[0].style.visibility='hidden'", element)
这样,您就可以使用
class='blockUI blockOverlay'
如果我是正确的,您的元素可以被单击。

根据的第5条,我通过暗示代码在尝试单击之前等待临时覆盖消失来解决它

wait.until(EC.invisibility_of_element_located((By.XPATH,
              "//div[@class='blockUI blockOverlay']")))
el_xp("//input[@value='Save']").click()

此外,您还可以尝试通过
JavaScript
单击元素,如下所示:


#包含产品搜索栏和按钮的元素
search\u area=el\u id(“产品”)。按类名称(“searchArea”)查找元素
#通过执行javascript单击元素
驱动程序。执行_脚本(“参数[0]。单击();”,搜索_区域)

请提供一份可能的感谢DebanjanB!最后,5号车成功了<代码>等待.直到(位于((By.XPATH,//div[@class='blockUI blockOverlay']])的元素的EC.invisibility\u然后
el\u xp(//input[@value='Save'])。单击()
。如何检测临时覆盖的XPATH?我试图在Chrome开发工具上检测它,但由于它很快消失,我无法知道xpath。我试过了。等待它消失。它结束时说它已经消失了,但我在尝试单击时仍然出现了错误。在我的情况下,它工作正常,我认为由于元素中的call click()会使用(x,y)位置执行类似于“虚拟单击”的操作,但是使用call click()使用execute_脚本会直接调用该元素的脚本
wait.until(EC.invisibility_of_element_located((By.XPATH,
              "//div[@class='blockUI blockOverlay']")))
el_xp("//input[@value='Save']").click()