You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium点击Telegram“照片或视频”按钮被拦截如何解决

解决方案

根因说明

ElementClickInterceptedException 报错的根本原因是Telegram前端使用c-ripple类的动效遮罩层实现点击反馈,菜单刚展开时遮罩层尚未完成动画消失,此时触发点击会被遮罩层承接,导致目标元素无法接收点击事件。

可行解决方法

方法1:等待遮罩层消失后再点击

先主动等待c-ripple元素不可见,再触发目标元素点击,适配前端动画逻辑:

# 原有打开菜单的逻辑保持不变
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[1]/div[1]'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[2]'))).click()

# 先等待c-ripple遮罩层消失
WebDriverWait(self.driver, 5).until(EC.invisibility_of_element_located((By.CLASS_NAME, 'c-ripple')))
# 再定位并点击目标元素,优先定位按钮父节点而非文本节点,避免点击范围问题
target_btn = WebDriverWait(self.driver, 8).until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(),'Photo or Video')]/ancestor::div[contains(@class,'btn-menu-item')]")))
target_btn.click()

方法2:用JavaScript直接触发点击事件

绕开浏览器原生点击的元素层级校验,直接触发目标元素的点击回调,绝大多数场景下可跳过遮罩层拦截:

# 原有打开菜单的逻辑保持不变
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[1]/div[1]'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[2]'))).click()

# 定位到目标元素后用JS执行点击
target_btn = WebDriverWait(self.driver, 8).until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(),'Photo or Video')]/ancestor::div[contains(@class,'btn-menu-item')]")))
self.driver.execute_script("arguments[0].click();", target_btn)

方法3:临时隐藏遮罩层(极端场景备用)

如果上述方案都不生效,可以临时将遮罩层设置为不可点击,点击完成后再恢复属性:

# 原有打开菜单的逻辑保持不变
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[1]/div[1]'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="column-center"]/div/div/div[4]/div/div[1]/div[7]/div[2]'))).click()

# 临时禁用所有c-ripple元素的指针事件
self.driver.execute_script("document.querySelectorAll('.c-ripple').forEach(el => el.style.pointerEvents = 'none');")
# 点击目标元素
target_btn = WebDriverWait(self.driver, 8).until(EC.element_to_be_clickable((By.XPATH, "//*[contains(text(),'Photo or Video')]/ancestor::div[contains(@class,'btn-menu-item')]")))
target_btn.click()
# 恢复遮罩层属性(可选,不影响功能可省略)
self.driver.execute_script("document.querySelectorAll('.c-ripple').forEach(el => el.style.pointerEvents = 'auto');")

内容的提问来源于stack exchange,提问作者John Niyazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:48:05