Javascript 如何使用所有cookie重新创建页面?
我正在努力:Javascript 如何使用所有cookie重新创建页面?,javascript,puppeteer,Javascript,Puppeteer,我正在努力: 访问初始化会话的页面 将会话存储在JSON对象中 访问同一页面,该页面现在应该可以识别现有会话 我尝试的实现如下: import puppeteer from 'puppeteer'; const createSession = async (browser, startUrl) => { const page = await browser.newPage(); await page.goto(startUrl); await page.waitForSe
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
用于捕获加载页面的cookieuseSession
将使用现有cookie加载页面session.url
页面无法识别该会话。似乎并非所有cookie都是通过这种方式捕获的。似乎页面#cookies
返回了一些cookie,其会话=true,过期=0
配置setCookie
忽略这些值
我通过构建一个新的cookies数组来解决这个问题,该数组覆盖了expires
和session
属性
const cookies = await page.cookies();
const sessionFreeCookies = cookies.map((cookie) => {
return {
...cookie,
expires: Date.now() / 1000 + 10 * 60,
session: false
};
});
在编写此答案时,
会话
属性未被记录。请参阅以下问题。puppeterpage.cookies()
方法仅获取当前页面域的cookies。然而,在某些情况下,它也可能拥有来自不同域的cookie
您可以调用内部方法Network.getAllCookies
从所有域获取Cookie
(async() => {
const browser = await puppeteer.launch({});
const page = await browser.newPage();
await page.goto('https://stackoverflow.com', {waitUntil : 'networkidle2' });
// Here we can get all of the cookies
console.log(await page._client.send('Network.getAllCookies'));
})();
这里有更多关于这条线的信息-