【问题标题】:Puppeteer launch a new tab in current window, not new windowPuppeteer 在当前窗口中启动一个新选项卡,而不是新窗口
【发布时间】:2019-08-11 13:01:19
【问题描述】:

我几乎尝试了所有方法,但似乎无法弄清楚如何让 Puppeteer 在我当前的浏览器窗口(我登录 Chrome 的位置)而不是新的无缓存注销浏览器中工作。这是我当前的配置设置一切。我已经尝试使用远程调试端口启动 chrome,在 args 中加载用户数据以启动 puppeteer,启动 Chromium 和我当前的 Chrome 安装路径等。这是我当前的代码:

const opts = {
  logLevel: 'info',
  output: 'json'
};


const chrome = await chromelauncher.launch( {port:9222 });
opts.port = chrome.port;

// Connect to it using puppeteer.connect().
const resp = await util.promisify(request)(`http://localhost:${opts.port}/json/version`);
const {webSocketDebuggerUrl} = JSON.parse(resp.body);
const browser = await puppeteer.connect({browserWSEndpoint: webSocketDebuggerUrl, 
  args: ["--disable-extensions"]});
const page = await browser.newPage();
await page.setViewport({ width: 1366, height: 768});

我的资源已经用完了,如果有什么问题,请告诉我。谢谢!

【问题讨论】:

  • loading user data in args for launching puppeteer,它说你试过这个。但是,你没有提到你在哪里尝试这个以及你为什么使用--disable-extensions args 或使用浏览器WSpoint。 :)
  • 嗨!我用 --user-data-dir 将它加载到 args 中,并作为 puppeteer 的参数

标签: javascript google-chrome chromium puppeteer


【解决方案1】:

启动时添加 --new-window 参数

【讨论】:

  • 你能解释一下这个命令是如何解决问题的吗?
【解决方案2】:

不确定这是否对您的情况有用,因为我使用的是 Chromium 浏览器而不是我的系统 chrome 浏览器,但我将 Chromium 设置保存在项目 PeaceOut 中。 我还在学习如何使用 puppeteer,所以可能不是所有事情都做得最好。

const browser = await puppeteer.launch({
    headless: false,
    devtools: true,
 // slowMo: 250 // slow down by 250ms
 // executablePath <string> Path to a Chromium or Chrome executable to run
    userDataDir: 'C:\\Users\\TeDev\\Scrape\\PeaceOut\\bdata' 
 // userDataDir <string> Path to a User Data Directory.
});
const page = await browser.pages();
await page[0].setViewport({ width: 1280, height: 1080 })
console.log(`Trying to access ${URL}`);
await page[0].goto(URL);  // use tab 0, so Chromium doesn't show a blank tab.

【讨论】:

    【解决方案3】:

    您必须使用userDataDir 才能重用缓存。

    puppeteer.launch({
      userDataDir: 'PATH TO DATA FOLDER',
    })
    

    你可以在这里找到你的数据目录,

    • Windows 7、8.1 和 10:C:\Users\&lt;username&gt;\AppData\Local\Google\Chrome\User Data\Default
    • Mac OS X El Capitan:Users/&lt;username&gt;/Library/Application Support/Google/Chrome/Default
    • Linux:/home/&lt;username&gt;/.config/google-chrome/default

    另一种方法是打开chrome://version 并从那里选择路径,

    现在,删除Default,您将获得您的数据目录,

    • [配置文件路径]C:\Users\Alice\AppData\Local\Google\Chrome\User Data\Default
    • [用户数据目录]C:\Users\Alice\AppData\Local\Google\Chrome\User Data

    所以代码看起来像,

    puppeteer.launch({
      userDataDir: `C:\Users\Alice\AppData\Local\Google\Chrome\User Data`, 
      // <-- notice I used backtick to avoid writing backslashs
    })
    

    详细了解数据目录here

    另一个有趣的参数是--profile-directory,您可以命名一个配置文件并使用它。

    --profile-directory=Default
    

    【讨论】:

    • 嗨!感谢您的回复 - 我尝试了上面列出的内容:const browser = await puppeteer.launch({ headless: false, userDataDir: "C:\\Users\\scott\\AppData\\Local\\Google\\Chrome\\User Data\\Default" }); const page = await browser.newPage(); await page.setViewport({ width: 1366, height: 768});
    • 没有成功 - 仍然启动一个新窗口,仍然没有我的用户数据
    • 我没有写正确的答案,对不起,给我1分钟更新它。
    • 好了,试试这个,让我知道会发生什么。
    • 原来的问题有.connect,所以我建议一个只包含最少可重现代码的新项目。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2011-06-21
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多