设置
我使用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_id(x) = browser.find_element_by_id(x)
。
问题
执行上面的代码会出现以下错误,
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
time.sleep(1)
search_area.find_element_by_xpath('span/a[1]').click()
但是我用不同的方法来解决这个问题,所以我按照this answer,做了以下操作,
# 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()
但我得到了完全相同的错误。
我也尝试了this answer,但同样的错误。
我该如何解决这个问题?
4条答案
按热度按时间lskq00tm1#
有几种方法可以做到这一点,其中一种方法是通过Javascript执行器。
你可以说:
这样,你就可以用
class = 'blockUI blockOverlay'
来阻止div,如果我是正确的,你的元素就可以被点击了。ovfsdjhp2#
在DebanjanB's answer的nr.5之后,我通过暗示代码在尝试单击之前等待临时覆盖消失来解决这个问题,
3lxsmp7m3#
此外,您可以尝试按
JavaScript
单击元素,如下所示:oogrdqng4#
接受的答案要求你知道哪个元素将被用作覆盖。如果这个要求不成立(如@Blaszard在接受的答案下的注解中所提到的),那么你可以使用这个通用函数来获取显示在另一个元素之上的任何元素:
当您调用
getOverlappingElement(driver, button)
这样的函数时,它将返回显示在button
上方的元素,或者当button
不重叠时,它将返回None。此方法不包括元素部分重叠的情况。对于大多数情况,当加载动画或广告使整个页面重叠时,此方法有效。