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ď č. 1Hlavná 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()}`);
});