[初学者JS在这里。我计划从多个站点收集cookie,所以我想将以下内容转换为Node.js帮助函数。
const chrome = require('chrome-cookies-secure');
const puppeteer = require('puppeteer');
const url = 'https://www.stackoverflow.com';
const getCookies = (callback) => {
chrome.getCookies(url, 'puppeteer', function(err, cookies) {
if (err) {
console.log(err, 'error');
return
}
console.log(cookies, 'cookies');
callback(cookies);
}, 'Profile 6') // e.g. 'Profile 2'
}
// find profiles at ~/Library/Application Support/Google/Chrome
getCookies(async (cookies) => {
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
await page.setCookie(...cookies);
await page.goto(url);
await page.waitFor(5000);
browser.close()
});
上面的代码启动了puppeteer,与Chrome中的cookie很好。
我在下面尝试使此功能起作用,以便在下面轻松传递任何网址。
helper.js
const chrome = require('chrome-cookies-secure');
module.exports.get_cookies = async (url) => {
chrome.getCookies(url, 'puppeteer', function(err, cookies) {
if (err) {
console.log(err, 'error');
return
}
console.log(cookies, 'cookies');
return Promise.resolve(cookies);
}, 'Profile 1') // e.g. 'Profile 2'
}
stackoverflow.js
run = async () => {
var helper = require('./helper.js')
const browser = await puppeteer.launch({
headless: false
});
const page = await browser.newPage();
const url = 'https://www.stackoverflow.com/';
var cookies = await helper.get_cookies(url);
console.log('got cookies');
await page.setCookie(...cookies);
await page.goto(url);
await page.waitFor(5000);
browser.close()
}
run()
问题是控制台在记录cookie后,执行只是暂停。我不确定如何解决此问题。当我^ C时,js没有告诉我它正在执行什么,只是中断了。
更新
由于Molda,我能够获得退货Cookie。现在尝试处理Promise拒绝。
got cookies
(node:53555) UnhandledPromiseRejectionWarning: TypeError: page.setCookie is not iterable (cannot read property Symbol(Symbol.iterator))
at run (/Users/paragbaxi/Documents/GitHub/safeshifter/libs/example_local_cookies.js:39:16)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
(node:53555) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:53555) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[
{
name: 'token',
value: '3.oUjlqQnJzd0UiLCJleHBpcmVzIjoiMjAxOS0xMi0yNVQwMzo0NTo0My4wMDBaIiwibG9nZ2VkT3V0IjpmYWxzZSwic2NvcGVzIjpbIioiLCJlbWFpbCJdfQ==',
expires: 13284873942637332,
domain: '.stackoverflow.com',
path: '/',
Secure: true
}
] cookies
非常感谢LJHarb
function getCookies(url) {
return new Promise(async (resolve, reject) => {
await chrome.getCookies(url, 'puppeteer', function (err, cookies) {
if (err) { reject(err); }
else { resolve(cookies); }
}, chrome_profile);
});
}