Кукловод пропускает ответы и ведет себя не так, как Кукольник - PullRequest
0 голосов
/ 16 апреля 2020

Я написал простую программу, которая только регистрирует запросы и ответы, один раз с pyppeteer в Python, и (после того, как я столкнулся с проблемами, которые я опишу позже) один раз с кукольником в JavaScript. Вот код JS:

const puppeteer = require('puppeteer');
const url = 'https://www.twitch.tv/';
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setRequestInterception(true);

    page.on('request', request => {
        console.log("REQUEST: " + request.url());
        request.continue();
    });

    page.on('response', response => {
        console.log("RESPONSE: " + response.url());
    });

    await page.goto(url, {waitUntil: ["networkidle0", "domcontentloaded"]});
    await browser.close();
})();

А вот код Python:

import asyncio
from pyppeteer import launch

url = "https://www.twitch.tv/"

async def handle_request(request):
    print("REQUEST: ", request.url)
    await request.continue_()

async def handle_response(response):
    print("RESPONSE: ", response.url)

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.setRequestInterception(True)

    page.on('response', handle_response)
    page.on('request', handle_request)

    await page.goto(url, waitUntil=["networkidle0", "domcontentloaded"])
    await browser.close()

asyncio.get_event_loop().run_until_complete(main()) 

Затем я сравниваю их вывод, используя:

> python3 script.py | grep "wasm"
REQUEST:  https://static.twitchcdn.net/assets/wasmworker.min-[redacted].js
REQUEST:  https://static.twitchcdn.net/assets/wasmworker.min-[redacted].wasm
> node script.js | grep "wasm"
(nothing)

Мои проблемы с этим:

(1) Почему я вообще получаю разные результаты? Разве Puppeteer и Pyppeteer не должны использовать один и тот же браузер в фоновом режиме и (надеюсь) одинаковые настройки по умолчанию (например, viewport ... et c.)?
(2) Даже если версия Python работает лучше (субъективно, для моего случая использования), поскольку он регистрирует запросы, почему он не регистрирует соответствующие ответы ? При работе в режиме без заголовка на консоли разработчика оба запроса будут отображаться с кодом ответа 200. Что может привести к тому, что pyppeteer не зарегистрирует ответы?

Я пытался использовать разные размеры окна просмотра и включать / отключать кэш, но безрезультатно.

РЕДАКТИРОВАТЬ: Хорошо, причина (1), кажется, в том, что пириптир просто устарел. Относительно (2): twitch.tv не обслуживает файл, который я собираю при работе с кукловодом (также потоки просто не работают); Несмотря на то, что я настроил кукловода использовать ту же самую исполняемую строку chrome и строку UserAgent, что и при ручном посещении страницы, где она работает Я подумал, что это может быть как-то связано с отключением расширений кукловода, так как консоль отладки показывает некоторые ошибки с cast_sender.js из расширения приведения chrome, но даже запускает chrome с точными аргументами saame, поскольку кукловод загружает файлы интерес.

...