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

Playwright拦截弹窗问题:Tumblr站点Cookie及登录弹窗无法触发事件

解决Tumblr页面内Cookie政策与登录弹窗的Playwright处理方案

你监听的popup和dialog事件不对路——Tumblr的Cookie政策弹窗、登录弹窗都是页面内嵌的DOM模态框,不是新打开的浏览器窗口/标签页(对应popup事件),也不是浏览器原生的alert/confirm对话框(对应dialog事件),所以这些事件根本不会触发。

直接定位弹窗元素处理就行,下面是修改后的可运行代码:

from playwright.sync_api import sync_playwright, expect

def handle_cookie_popup(page):
    # 等待Cookie政策弹窗的关闭按钮出现并点击
    try:
        # 优先用文本定位,比class更稳定(Tumblr的class可能会更新)
        close_cookie_btn = page.locator("button:has-text('Accept all')")
        expect(close_cookie_btn).to_be_visible(timeout=10000)
        close_cookie_btn.click()
        print("Cookie弹窗已关闭")
    except Exception as e:
        print("未检测到Cookie弹窗或关闭失败:", e)

def handle_login_popup(page, username, password):
    # 处理登录弹窗,填写账号密码并提交
    try:
        # 等待用户名输入框加载完成
        username_input = page.locator("input[name='email']")
        expect(username_input).to_be_visible(timeout=10000)
        
        # 填写账号密码
        username_input.fill(username)
        password_input = page.locator("input[name='password']")
        password_input.fill(password)
        
        # 点击登录按钮并等待登录完成
        login_btn = page.locator("button:has-text('Log in')")
        login_btn.click()
        expect(username_input).to_be_hidden(timeout=15000)
        print("登录完成")
    except Exception as e:
        print("登录弹窗处理失败:", e)

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page_context = browser.new_context()
    page = page_context.new_page()

    page.goto("https://www.tumblr.com/search/handbags?t=365")
    page.wait_for_load_state(state="domcontentloaded")

    # 先处理Cookie弹窗
    handle_cookie_popup(page)
    
    # 处理登录弹窗(若弹窗未自动弹出,可放到滚动逻辑后触发)
    handle_login_popup(page, "你的账号", "你的密码")

    print(page.title())

    # 滚动逻辑替换为Playwright推荐的等待方式
    for _ in range(5):
        page.mouse.wheel(0, 15000)
        page.wait_for_timeout(2000)

    page.wait_for_timeout(20000)
    # browser.close()

关键细节说明:

  • 用expect断言等待元素状态,比直接定位更可靠,避免元素未加载就操作
  • 定位元素优先用文本、name属性这类不易变动的标识,硬编码class容易因为网站更新失效
  • 替换sleep为page.wait_for_timeout,是Playwright官方推荐的调试等待方式(生产环境建议等待具体元素而非固定时长)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:05:39