доступ кукловода к ответу на конкретный запрос, как на вкладке сети devtools - PullRequest
1 голос
/ 09 июня 2019

Я бы хотел получить ответ на последний HTTP-запрос, показанный на скриншоте.

Текущий код кукловода показан ниже.Может кто-нибудь показать мне, как изменить его так, чтобы он получал ответ JSON непосредственно из браузера?Спасибо.

const puppeteer = require('puppeteer');

(async () => {
    //  const browser = await puppeteer.launch();
    const browser = await puppeteer.launch({
        headless: false
        , args: ['--user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3312.0 Safari/537.36"']
    });
    const page = await browser.newPage();
    await page.goto('https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2');
    await page.goto('https://www.genecards.org/cgi-bin/carddisp.pl?gene=BSCL2');

    const linkHandlers = await page.$x("//div[@id='enhancers']//a[@data-track-event='Table See-All']");
    if (linkHandlers.length > 0) {
        await linkHandlers[0].click();
    } else {
        throw new Error("Link not found");
    }

    const html = await page.content()
    //await browser.close();
    console.log(html)
})();

enter image description here

1 Ответ

1 голос
/ 09 июня 2019

Вы можете использовать page.waitForResponse для ожидания ответа и response.json для анализа ответа как JSON.

Код

Заменить часть await linkHandlers[0].click(); на эту:

const [response] = await Promise.all([
    page.waitForResponse(response => response.url().includes('/gene/api/data/Enhancers')),
    linkHandlers[0].click()
]);
const dataObj = await response.json();
console.log(dataObj);

Сначала будет ожидаться ответ (при параллельном щелчке). После того, как ответ обнаружен, ответ анализируется как JSON. Чтобы получить результат ответа в виде простого текста (вместо его анализа), вы можете использовать response.text()

...