节点将回调转换为异步会导致执行暂停

问题描述 投票:0回答:1

[初学者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
node.js google-chrome cookies callback puppeteer
1个回答
0
投票

非常感谢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);
    });
  }
© www.soinside.com 2019 - 2024. All rights reserved.