【问题标题】:Playwright intercept popup/iframe windows剧作家拦截弹出/ iframe窗口
【发布时间】:2022-11-01 20:14:52
【问题描述】:

我是剧作家新手,在tumblr 上导航时无法关闭弹出窗口

'cookies Policy' 和 'login' 的弹出窗口永远不会触发事件:'page.on("popup",', 'page.once("popup",', 'page.on("dialog",'.

我想关闭策略弹出窗口并在以下弹出窗口中登录我的帐户。 谢谢您的帮助

我的代码如下:

from time import sleep

from playwright.sync_api import sync_playwright


def close_popups(page):
    print("popup event")
    close_button = page.locator("// button[@class='components-button white-space-normal is-primary']")
    close_button.click()


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

    page.on("popup", close_popups)
    page.once("popup", close_popups)

    page.on("dialog",
            lambda dialog: print("test")
            # lambda dialog: dialog.accept()
            )
    page.goto("https://www.tumblr.com/search/handbags?t=365")

    page.wait_for_load_state(state="domcontentloaded")

    print(page.title())

    # scroll down
    # https://stackoverflow.com/questions/69183922/playwright-auto-scroll-to-bottom-of-infinite-scroll-page
    for i in range(5):  # make the range as long as needed
        page.mouse.wheel(0, 15000)
        sleep(2)
        i += 1
    # browser.close()
    sleep(2000)

【问题讨论】:

    标签: python-3.x web-scraping playwright


    【解决方案1】:

    您可以使用单击功能单击按钮,问题是按钮位于 iframe 内。有了这个就足够了

    from time import sleep
    from playwright.sync_api import sync_playwright
    
    def do_with_frame(frame):
        if frame.is_visible(".is-primary"):
            frame.click(".is-primary")
    
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page_context = browser.new_context()
        page = page_context.new_page()
        page.on("frameattached", do_with_frame)
        page.goto("https://www.tumblr.com/search/handbags?t=365")
        page.wait_for_load_state(state="domcontentloaded")
    
        print(page.title())
    
        # scroll down
        # https://stackoverflow.com/questions/69183922/playwright-auto-scroll-to-bottom-of-infinite-scroll-page
        for i in range(5):  # make the range as long as needed
            page.mouse.wheel(0, 15000)
            sleep(2)
            i += 1
        # browser.close()
        sleep(2)
    

    考虑到这一点,您可能会在您想要做的过程中在页面上找到新的 iframe。所以,如果某个元素在 iframe 中,请记住:

    1. 保存 iframe 元素
    2. 使用保存的 iframe 元素在其元素中执行操作

    【讨论】:

    • tx 是的,我刚刚意识到 iframe,有没有办法监视哪个 iframe 在事件中处于活动状态,因为这并不总是出现。或者你认为强迫焦点总是有效的
    • 我会说特定的弹出窗口总是会出现。无论如何,您可以在点击之前检查 iframe 是否可见。我更新答案
    • 已接受作为答案,但更喜欢事件驱动的解决方案,因为这些 iframe 随时出​​现并且可能使代码错误,除非一切都在尝试括号中.. tx
    • @JeJe 对不起,我不明白你在说什么。我知道了。我编辑了我的答案。基本上是带有回调的事件page.on("frameattached", do_with_frame)
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2011-03-03
    • 2016-10-27
    • 1970-01-01
    相关资源
    最近更新 更多