selenium 打开网络页面的时候,模拟关闭弹窗的方法(汇总,全!)

在使用 Selenium 自动化测试或爬取网页时,可能会遇到弹窗,影响脚本执行,例如广告、登录提示、浏览器通知。

怎么在打开页面的时候,关闭弹窗呢?

这里我们就要区分,这个网页弹窗是属于哪种类型的:

是不是位置不限,需要手动找位置的,例如那种还会弹来弹去的广告

or 是固定的广告位,一直都会有,固定在某个角落

or 一些特定的时间,例如618等采购节,忽然不留神,就会跳出来发红包的那种?

不同的类型,用不同的方法来处理,对症下药,效果更好!

方法总结

弹窗类型解决方法
JavaScript 弹窗(alert/confirm)driver.switch_to.alert.accept()
浏览器通知弹窗--disable-notifications
HTML 弹窗(广告)find_element + 点击关闭
动态弹窗(难定位)execute_script 删除/隐藏元素
新窗口弹窗window_handles 切换关闭

一下是详细的方法:

1. 关闭 JavaScript 弹窗(Alert/Confirm/Prompt)

网页可能会触发 alert(), confirm(), prompt() 这类弹窗,可以用 switch_to.alert 处理:

from selenium import webdriver
from selenium.webdriver.common.alert import Alert

driver = webdriver.Chrome()
driver.get("https://example.com")

# 触发弹窗后,切换到 alert 并关闭
alert = driver.switch_to.alert
alert.accept()  # 点击"确定"
# alert.dismiss()  # 点击"取消"(适用于 confirm/prompt)

2. 关闭浏览器通知弹窗

有些网站会请求通知权限,可以在启动浏览器时禁用通知:

from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--disable-notifications")  # 禁用通知弹窗

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")

这个方法可以屏蔽掉一些简单的弹窗,但是可能会影响一些权限警告,例如跳转到某些网页,浏览器会出现“是否阻止”的按钮,这个可能会遭受屏蔽。


3. 关闭广告弹窗(普通 HTML 弹窗)

如果弹窗是 HTML 元素(如 <div>),可以用 find_element 定位并关闭:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://example.com")

try:
    # 等待弹窗出现,并点击关闭按钮(如 X 按钮)
    close_btn = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//button[@class='close-btn']"))
    )
    close_btn.click()
except Exception as e:
    print("未找到弹窗或关闭失败:", e)

这种方法适用于大多数的情况,只要是固定的广告位,就可以咔嚓掉它,就像是关掉一样。


4. 使用 execute_script 直接移除弹窗元素

如果弹窗无法直接点击,可以用 JavaScript 删除或隐藏它:

driver.execute_script("""
    var popup = document.querySelector('.popup-class');
    if (popup) popup.remove();
""")

或者隐藏:

driver.execute_script("document.querySelector('.popup-class').style.display = 'none';")

5. 处理新窗口/标签页弹窗

如果弹窗是新窗口(如广告页),可以切换窗口并关闭:

main_window = driver.current_window_handle  # 记录主窗口

# 遍历所有窗口,关闭非主窗口
for handle in driver.window_handles:
    if handle != main_window:
        driver.switch_to.window(handle)
        driver.close()

driver.switch_to.window(main_window)  # 切换回主窗口

6. 使用浏览器选项屏蔽弹窗

在 Chrome 启动时设置 --disable-popup-blocking(但可能不适用于所有情况):

options = Options()
options.add_argument("--disable-popup-blocking")
driver = webdriver.Chrome(options=options)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值