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

使用Selenium关闭新加坡商业时报网站弹窗广告按钮的求助

解决Selenium关闭新加坡商业时报广告弹窗的问题

针对你在抓取https://www.businesstimes.com.sg/government-economy时遇到的广告弹窗无法关闭的问题,可尝试以下修正方案:

1. 等待元素可交互后再点击

未等待元素加载完成就直接点击是常见失败原因,改用WebDriverWait等待元素可点击后操作:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException

try:
    # 等待最多10秒,直到关闭按钮可点击
    close_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-id="pclose-btn"]'))
    )
    close_btn.click()
except TimeoutException:
    print("关闭按钮未找到或加载超时")

2. 检查广告是否在iframe内

多数广告会嵌入iframe,需先切换到对应iframe再定位元素:

try:
    # 查找广告iframe(可根据实际属性调整定位器)
    iframe = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe[class*="ad"]'))
    )
    driver.switch_to.frame(iframe)
    
    # 点击关闭按钮
    close_btn = WebDriverWait(driver, 5).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[data-id="pclose-btn"]'))
    )
    close_btn.click()
    
    # 切回主页面文档
    driver.switch_to.default_content()
except TimeoutException:
    print("未找到广告iframe或关闭按钮")

3. 修正元素定位器

若原定位器不准确,根据截图里的按钮样式,尝试更精准的定位:

  • XPATH定位:
close_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//button[contains(@class, "bz-pclose-btn")]'))
)
close_btn.click()
  • CSS选择器定位:
close_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'button.bz-el.bz-pclose-btn.knd-BUTTON'))
)
close_btn.click()

4. 备用方案:JavaScript强制点击

若元素点击被页面事件拦截,用JS直接触发点击:

close_btn = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'button[data-id="pclose-btn"]'))
)
driver.execute_script("arguments[0].click();", close_btn)

额外优化:调整ChromeOptions参数

替换无效的广告拦截参数,添加更有效的配置:

options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-extensions")
options.add_argument("--disable-notifications")
options.add_argument("--disable-popup-blocking")
# 模拟普通浏览器UA,避免被识别为自动化工具
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
# 启用内置广告拦截
options.add_argument("--enable-features=AdPrivacyEnforcement")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:22