我在尝试着:
我尝试的实现如下:
import puppeteer from 'puppeteer';
const createSession = async (browser, startUrl) => {
const page = await browser.newPage();
await page.goto(startUrl);
await page.waitForSelector('#submit');
const cookies = await page.cookies();
const url = await page.url();
return {
cookies,
url
};
};
const useSession = async (browser, session) => {
const page = await browser.newPage();
for (const cookie of session.cookies) {
await page.setCookie(cookie);
}
await page.goto(session.url);
};
const run = async () => {
const browser = await puppeteer.launch({
headless: false
});
const session = await createSession(browser, 'http://foo.com/');
// The session has been established
await useSession(browser, session);
await useSession(browser, session);
};
run();
createSession
用于捕获加载页面的cookies。 useSession
预计使用现有 cookie 加载页面。 但是,这不起作用 -
session.url
页无法识别 session 。似乎并非所有 cookie 都以这种方式被捕获。 最佳答案
page#cookies
似乎返回了一些带有 session=true,expires=0
配置的 cookie。 setCookie
忽略这些值。
我通过构建一个新的 cookie 数组来覆盖 expires
和 session
属性来解决这个问题。
const cookies = await page.cookies();
const sessionFreeCookies = cookies.map((cookie) => {
return {
...cookie,
expires: Date.now() / 1000 + 10 * 60,
session: false
};
});
在撰写此答案时,未记录
session
属性。请参阅以下问题 https://github.com/GoogleChrome/puppeteer/issues/980 。关于javascript - 如何使用所有 cookie 重新创建页面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46631333/