selenium中element is not attached to the page document问题的解决方式
原始代码
ele = driver.find_element(By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()
执行完并没有看到预期的拖拽效果
加了sleep看看,结果报了标题描述的异常
ele = driver.find_element(By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
sleep(5)
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()
【方法一】在网上搜了下,需要报错之后再定位元素
ele = driver.find_element(By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
sleep(5)
try:
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()
except StaleElementReferenceException:
print("enter except")
ele = driver.find_element(By.CSS_SELECTOR,
"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()
【方法二】元素等待
WebDriverWait(driver, 10, 1).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")))
ele = driver.find_element(By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()
【方法三】在定位元素之前先强制等待几秒,等待元素显示在页面上之后再操作,到头来还是这个最简单
sleep(3)
ele = driver.find_element(By.CSS_SELECTOR,"#JDValidate > div > div.JDJRV-img-panel.JDJRV-embed > div.JDJRV-img-wrap > div.JDJRV-smallimg > img")
# sleep(5)
ActionChains(driver).click_and_hold(ele).move_by_offset(xoffset=100, yoffset=0).perform()