如何使用puppeteer自动执行Amazon Connect CCP登录?

时间:2019-02-12 19:26:31

标签: javascript google-chrome puppeteer google-chrome-headless amazon-connect

我正在尝试使用puppeteer来自动化我们在Amazon Connect中的代理的登录过程,但是我无法让puppeteer完成加载CCP登录页面。参见下面的代码:

const browser = await puppeteer.launch();

const page = await browser.newPage();
const url = 'https://ccalderon-reinvent.awsapps.com/connect/ccp#/';

await page.goto(url, {waitUntil: 'domcontentloaded'});

console.log(await page.content());

// console.log('waiting for username input');

// await page.waitForSelector('#wdc_username');

await browser.close();

我永远看不到页面的内容,它超时了。难道我做错了什么?如果我使用{headless:false}启动浏览器,我将看到页面永远无法完成加载。

请注意,https://www.github.com/login可以使用相同的代码,因此该代码必须特定于Connect的CCP的源代码。

1 个答案:

答案 0 :(得分:4)

如果您是未来人,并且无缘无故地遇到puppeteer的问题,请尝试先降级puppeteer的版本,看看问题是否仍然存在。


这似乎是Chromium开发版本73.0.3679.0的错误,错误日志指出它无法以某种方式加载特定脚本,但我们仍然可以手动加载脚本。

enter image description here

解决方案:

使用Puppeteer版本1.11.0解决了此问题。但是,如果要使用puppeteer 1.12.2版但铬版本不同,则可以使用executablePath参数。

以下是木偶戏中使用的各个版本(此时是答案)

  • 铬73.0.3679.0-木偶v1.12.2
  • 铬72.0.3582.0-Puppeteer v1.11.0
  • 铬71.0.3563.0-木偶v1.9.0
  • 铬70.0.3508.0-木偶版v1.7.0
  • 铬69.0.3494.0-Puppeteer v1.6.2

我检查了本地安装的chrome,它正确加载了页面,

$(which google-chrome) --version
Google Chrome 72.0.3626.119

注意:人偶团队在其文档中建议专门使用代码附带的镶边(很可能是最新的开发人员版本),而不要使用其他修订版。

我还对代码进行了一些编辑,以在完成所有网络请求并且username输入为可见后完成加载。

const puppeteer = require("puppeteer");
(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    executablePath: "/usr/bin/google-chrome"
  });

  const page = await browser.newPage();
  const url = "https://ccalderon-reinvent.awsapps.com/connect/ccp#/";

  await page.goto(url, { waitUntil: "networkidle0" });

  console.log("waiting for username input");
  await page.waitForSelector("#wdc_username", { visible: true });

  await page.screenshot({ path: "example.png" });
  await browser.close();
})();

可以通过多种方式获得特定的修订号,一种是检查puppeteer软件包的package.json1.11.0的网址是

https://github.com/GoogleChrome/puppeteer/blob/v1.11.0/package.json

如果您希望自动化下载chrome版本,可以使用browserFetcher来获取特定版本。

const browserFetcher = puppeteer.createBrowserFetcher();
const revisionInfo = await browserFetcher.download('609904'); // chrome 72 is 609904
const browser = await puppeteer.launch({executablePath: revisionInfo.executablePath})

结果: enter image description here