Как я могу получить URL, используя данные сеанса со страницы кукловода?
Я пытаюсь зайти на сайт со своими учетными данными и скачать pdf, используя puppeter. Я получил pdf-URL с помощью puppeteer, но теперь я хочу использовать node-fetch для доступа к этой странице. Чтобы получить страницу в формате PDF, мне нужно включить данные о сеансе в опции, но я не знаю, правильно ли я это делаю.
Я пытался использовать 'credentials: 'include', получать куки с page.cookies и другие небольшие изменения в опциях, отправленных с fetch.
var response = await page.goto(urlPdf);
var headersPup = response.request().headers();
const { cookies } = await page._client.send("Network.getAllCookies", {});
const sessionFreeCookies = cookies.map((cookie) => {
return {
...cookie,
expires: Date.now() / 1000 + 10 * 60,
session: false
};
});
headersPup['Cookie'] = sessionFreeCookies; //adding the cookies to header
headersPup['Content-Type'] = 'application/pdf';//adding content-type
var opts = {
method: "GET",
headers: headersPup,
credentials: "include",
}
await fetch(urlPdf,opts).then(response => response
.body.pipe(fs.createWriteStream('test4.pdf'))
.on('close', () => console.log('pdf downloaded')));
Когда я открываю test4 как txt, я вижу html страницы входа, это означает, что я проиграл сессию. Как я могу сохранить сеанс для загрузки моего PDF?
1 ответ
Конечно, метод fetch не может сохранить сеанс, он не открывается в вашем браузере без монитора.
К сожалению, загрузка pdf не поддерживается кукловодом: https://github.com/GoogleChrome/puppeteer/issues/1248
В общем, чтобы войти в систему, вам нужно перейти (loginPage) и затем перейти на нужную вам страницу, куки управляются внутри объекта страницы.