【Python】selenium 点击某个按钮 click() 出现的报错问题--ElementClickIn ...

打印 上一主题 下一主题

主题 518|帖子 518|积分 1554

写在前面:
我们在利用selenium 点击某个元素时大概获取find_element的某个网页元素时,总会遇到一些问题。本人经验是,最直接的方法是用try_except 报错,直接绕过问题,可以直接看第一条。如果有爱好详细办理,可以看背面的几个方法,赶时间的伙伴可以只看第一条就好了!
我们在Python中利用Selenium库进行主动化测试时,如果遇到点击某个按钮时click()方法出现问题,Selenium会抛出一个非常。如果这个非常是
   selenium.common.exceptions.ElementClickInterceptedException
  这表明,我们点击的操纵被另一个元素拦截了,导致我们点不到我们想要的东西,而是点到别的东西。
办理这个问题,以下有几种方法:
1、try-except捕获非常报错:

个人觉得利用try-except语句来捕获这些非常是最直接和快捷的,将报出的问题捕获到,并给出下一步更详细的提示,去规复操纵,以下是代码的部分:
  1. #调用selenium的
  2. from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException
  3. try:
  4.     element = driver.find_element(By.XPATH,'//*[@id="app"]/main/section[1]/div/div[3]/span')
  5.     element.click()
  6. except ElementClickInterceptedException as e:
  7.     print("点击被拦截,请检查是否有其他元素覆盖在按钮上。")
  8.     #这里可以写遇到这个问题的解决方法,可以报错给自己看,也可以直接忽略到下一步等等。
  9. except NoSuchElementException as e:
  10.     print("找不到元素,请检查元素的定位方式是否正确。")
  11. except Exception as e:
  12.     print(f"发生了一个错误:{e}")
复制代码
通过捕获特定的非常范例并给出相应的错误信息,在写代码的时间,可以更快速地定位和办理问题。
当这些非常发生时,我们也可以通过编写自定义的错误来捕捉处理这些非常,如果想了解其他的非常Exception类,可以参考:
2、检查覆盖元素,关闭弹窗:

检查并办理覆盖元素: 检查页面上的覆盖元素,并尝试办理它们。
检查我们点击的元素是不是上面有一层覆盖的模态框或弹出窗口,如果有,尝试关闭或隐蔽它们,点击关闭的键,例如如图:
(图片来自网络)
代码:
  1. # 假设弹出窗口有一个关闭按钮
  2. close_button = driver.find_element(By.ID, "closeButton")
  3. close_button.click()
复制代码
如果不是窗口,那么看看是否有关闭下拉菜单、隐蔽覆盖层等。详细问题详细分析。如果是有隐蔽的覆盖层,必要找到下一层的接口网址。
3、滚动到元素的位置:

如果元素不在可视地区内,在页面底下,要滚动到该元素可以使它变得可点击。
  1. driver.execute_script("arguments[0].scrollIntoView();", element)
复制代码
4、利用显式等待,直到元素可以被点击

可能网站显示的速度太慢,必要比及页面加载才会让元素出来,这时间就可以用显性等待的方法。
  1. from selenium.webdriver.common.by import By
  2. from selenium.webdriver.support.ui import WebDriverWait
  3. from selenium.webdriver.support import expected_conditions as EC
  4. try:
  5.     element = WebDriverWait(driver, 10).until(
  6.         EC.element_to_be_clickable((By.ID, "myElement"))
  7.     )
  8.     element.click()
  9. except TimeoutException:
  10.     print("元素在指定时间内不可点击")
复制代码
5、利用ActionChains模拟鼠标移动到元素上再点击

这种情况实用于对方网站的服务器已经检测到了爬虫操纵,普通的click不能通过检验,必要点击元素才能让页面加载(当然这种情况其实少见),办理方法:
  1. from selenium.webdriver.common.action_chains import ActionChains
  2. action = ActionChains(driver)
  3. action.move_to_element(element).click(element).perform()
复制代码
6、刷新页面:

如果元素应该可见但当前不可见,可能是因为页面状态不精确。尝试刷新页面。
  1. driver.refresh()
复制代码
7、利用JavaScript:

通过执行 JavaScript 来点击元素,这可以绕过一些覆盖元素。
  1. driver.execute_script("arguments[0].click();", element)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表