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

使用Selenium关闭Hemnet网站JavaScript弹窗的解决方案求助

解决Hemnet网站Selenium弹窗问题

Hemnet的弹窗核心是Cookie授权弹窗,你的代码里存在不少无效操作(比如切换/关闭所有窗口),反而导致无法正确定位元素。以下是修正后的可行方案:

核心修正点

  • 移除错误的窗口操作逻辑:Hemnet弹窗在主页面DOM内,无需切换窗口
  • 使用显式等待确保元素加载完成后再操作,避免因元素未就绪导致的失败
  • 用精准选择器定位弹窗按钮,替代遍历所有按钮的低效方式

完整可运行代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

try:
    # 配置Chrome选项,减少弹窗干扰
    options = Options()
    options.add_argument("--incognito")
    options.add_argument("--window-size=1920x1080")
    options.add_argument("--disable-notifications")  # 禁用浏览器通知弹窗
    options.add_argument("--disable-popup-blocking")

    service = Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=service, options=options)

    driver.get("https://www.hemnet.se")

    # 等待Cookie授权弹窗出现,点击"Acceptera alla"按钮
    wait = WebDriverWait(driver, 15)
    # 优先用data-testid定位,比文本匹配更稳定
    accept_cookie_btn = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button[data-testid='accept-all']"))
    )
    accept_cookie_btn.click()

    # 此处可继续编写地区信息抓取逻辑,比如定位搜索框、筛选区域等
    print("弹窗已关闭,可执行后续操作")

finally:
    driver.quit()

备选方案(若data-testid选择器失效)

如果网站更新导致data-testid属性变化,可改用文本定位:

accept_cookie_btn = wait.until(
    EC.element_to_be_clickable((By.XPATH, "//button[contains(text(), 'Acceptera alla')]"))
)

注意事项

  • 避免使用find_elements(返回列表),优先用find_element配合显式等待,确保元素存在且可点击
  • 不要随意关闭或切换窗口,除非确认弹窗是独立新窗口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:31:20