/ / puppeteer api: iba získať presmerovanie domény - javascript, node.js, bezhlavý prehliadač, loutkář, google-chrome-headless

puppeteer api: získať iba presmerovanie domén - javascript, node.js, headless-browser, loutka, google-chrome-headless

Snažím sa získať všetky presmerovania domén pomocou aportu Puppeteer, uloženého do poľa predtým, než urobím snímku obrazovky poslednej adresy URL, ale kód, ktorý som doteraz získal, je tiež získavanie ďalších presmerovaní.

Napríklad, ak som goto youtube.com potom môj kód správne dostane presmerovania "https://youtube.com/", "https://www.youtube.com/",, ale aj iné presmerovania, napríklad doubleclick.net.

Chcem len získať presmerovanie, ktoré by sa stalo v paneli s adresou URL.

Podarilo sa mi to zúžiť request.resourceType === "document", Ako ju môžem zúžiť ďalej?

Tu je kód:

// node chrome.js http://youtube.com

const puppeteer = require("puppeteer");
var url = process.argv[2];

(async () => {

const browser = await puppeteer.launch({headless: true, timeout: 30000, ignoreHTTPSErrors: true});
const page = await browser.newPage();
// await page.setRequestInterception(true); // hangs with resourcetype

const urls = [];

page.on("request", request => {
// if (request.resourceType === "document" || request.resourceType === "script") {
if (request.resourceType === "document") {
urls.push(request.url);
request.continue();
}
});

await page.goto(url, {timeout: 20000, waitUntil: "load"}); //default load

await page.screenshot({path: "test.jpg", type: "jpeg", quality: 80, fullPage: false});
console.log(urls);

await browser.close();
})();

odpovede:

0 pre odpoveď č. 1

Hlavná odpoveď je prvá odpoveď. Takže to môžete skontrolovať raz metóda triedy Emitter:

page.once("response", function(response) {
console.log(`${response.status()} ${response.url()}`);
});
// page.goto(...);

ak chcete zoznam všetkých presmerovaní, môžete to urobiť:

let responses = [];
const _parseMainResponses = function(response) {
if(response.status() >= 300 && response.status() <= 399) {
responses.push(response);
}else {
responses.push(response);
// get a non redirect. We can now remove the listener
page.removeListener("response", _parseMainResponses);
}
};


// page.goto(...)

responses.map(function(response) {
console.log(`${response.status()} -> ${response.url()}`);
});