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

如何在Selenium Python中处理此类JavaScript弹窗?

Selenium处理阻塞click()的JavaScript弹窗方案

遇到JavaScript弹窗导致Selenium的click()方法被阻塞,无法正常执行操作,以下是针对这类弹窗的处理实现:

def handle_popup(current_browser):
    try:
        # 尝试处理可能出现的Alert弹窗
        alert = current_browser.switch_to.alert
        alert.dismiss()

    except NoAlertPresentException as e:
        try:
            # 遍历所有窗口句柄,尝试按ESC键关闭弹窗
            for window_handle in current_browser.window_handles:
                current_browser.switch_to.window(window_handle)

                action = ActionChains(current_browser)
                action.send_keys(Keys.ESCAPE)
                action.perform()

            # 根据异常信息中的元素标识查找并移除弹窗
            pop_up_element = re.findall(r'(?<=<)(.*?)(?=>)', str(e))[2]
            for element in current_browser.find_elements(By.CSS_SELECTOR, '*'):
                try:
                    if pop_up_element in element.get_attribute('innerHTML'):
                        current_browser.execute_script("""var element = arguments[0]; 
                                    element.parentNode.removeChild(element);""", element)
                        logging.info(f"已关闭弹窗,关联元素:{pop_up_element}")
                        break
                except Exception as inner_exception:
                    logging.warning(f"处理弹窗元素时出错:{str(inner_exception)}")

        except Exception as outer_exception:
            logging.warning(f"未找到弹窗或无法处理:{str(outer_exception)}")

    finally:
        # 切回默认页面内容
        current_browser.switch_to.default_content()

处理逻辑说明

  • 优先处理标准Alert弹窗:通过切换到Alert实例并执行关闭操作
  • 多窗口ESC尝试关闭:遍历所有打开的窗口句柄,模拟按下ESC键关闭非标准弹窗
  • DOM节点强制移除:解析异常信息提取弹窗关联元素标识,定位后通过JavaScript直接移除弹窗节点

内容的提问来源于stack exchange,提问作者Hafiz Umar Ashraf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:54:57