如何处理隐私信息弹窗?我正在使用 Python 和 pyppeteer 库进行网页抓取

问题描述 投票:0回答:1

我有一个可以工作的刮刀,但我无法关闭弹出窗口。而且弹出窗口只在某些情况下出现,所以我需要处理它 popup

我尝试找到一个按钮属性并单击“全部接受”

代码中粗体部分是我尝试过的

import asyncio
from pyppeteer import launch
import time
from datetime import datetime, timedelta
import pandas as pd


async def filter_by_url(url):

    browser = await launch(
        {
            "headless": False,
            'args':['--start-maximized'],
            # 'executablePath':'/usr/bin/google-chrome'
        }
    )
    # url = "https://www.justwatch.com/us/provider/netflix?sort_by=trending_7_day"
    page = await browser.newPage()
    await page.setViewport({'width': 1920, 'height': 1080})
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3')
    await page.goto(url)   
    ## Scroll To Bottom
    **#time.sleep(5)

    #await page.waitFor('footer span[data-icon="Accept all"]')
    #await page.click('button:has-text("Accept all")');
    #await Page.locator('uc-accept-all-button').first().click();**
    while True:
        
        await page.evaluate("""{window.scrollBy(0, document.body.scrollHeight);}""")
        time.sleep(2)
        end_point = await page.querySelector(".timeline__end-of-timeline")
        if end_point:
            print("reached to end points")
            break      

    

# Run the function
urls = [
    'https://www.justwatch.com/ca/provider/netflix?sort_by=trending_7_day'
]
for url in urls:
    asyncio.get_event_loop().run_until_complete(filter_by_url(url))

python-3.x pandas web-scraping popup pyppeteer
1个回答
0
投票

你的按钮放在

shadow-root
里面,要获取内部影子根结构,你应该先获取它的主机,然后获取
shadowRoot
属性。

影子主机有选择器

#usercentrics-root
。 您应该等待主机内容加载,然后单击内部按钮。如果内容尚未呈现 - 超时后重复。

在此之后,等待主机被隐藏是一个很好的做法。

有关 Shadow DOM 的更多信息

  await page.evaluate("""function acceptConsent() {
       let accept = document.querySelector('#usercentrics-root').shadowRoot.querySelector('[data-testid=uc-accept-all-button]');
       if(accept) {
         accept.click();
         return;
       }
       setTimeout(acceptConsent, 500);
       }
    """)
   await page.waitForSelector('#usercentrics-root', options={'visible': False})
© www.soinside.com 2019 - 2024. All rights reserved.