python selenium webdriver 浏览器自动化遇到 Message: element click intercepted: Element is not clickable at point(xx, xx). Other element would receive the click:解决问题。
问题详情:因为我要自动化,通过百家号上传视频,前面都很顺利,到了上传视频时,点击上传,却提示报错。我百度了很多解决办法,大多数都是说是要加 time.sleep 或者是 ui.WebDriverWait(driver,5) 等,一些等待加载的操作,可能在一般网页,确实能实现,但是到了JS动态加载的网页,可能不行。需要别的办法来实现了。
问题描述:
下面代码,是按照正常的网页去操作点击,这样操作是会报错的。
driver.find_element_by_xpath('//*[@id="root"]/div/div/div[1]/div/div/div[3]/div/div/div[2]/div[3]/div/div/div[2]/input')}.click()
报错如下:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div class="updataCoverBox" style="left: 400px; top: 80px; width: 680px; height: 382px;">...</div> is not clickable at point (558, 350). Other element would receive the click: <p class="video-online-edit-btn">...</p>
(Session info: chrome=84.0.4147.125
解决方案:
解决办法就是:使用 execute_script() 功能,代码如下。注意在find_element_by_xpath(“path”).click() 的.click(),这个函数要去掉。不然会报错。
button = driver.find_element_by_xpath('//*[@id="root"]/div/div/div[1]/div/div/div[3]/div/div/div[2]/div[3]/div/div/div[2]/input')
driver.execute_script("$(arguments[0]).click()",button)
上述办法仅适用于,JS动态加载 不可交互式元素的 input 点击事件。其他的提示无法找到元素标签的,可以在代码前,添加:time.sleep(你的秒数),前提是要导入time 函数。
或者是 : driver.refresh() #刷新网页/加载网页