问题描述
我正在尝试使用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}启动浏览器,则可以看到页面永远无法完成加载。
请注意,相同的代码可以在正常工作,因此它必须特定于Connect的CCP的源代码。
1楼
万一您来自未来并且毫无理由地遇到puppeteer的问题,请尝试先降级puppeteer的版本,然后查看问题是否仍然存在。
这似乎是Chromium开发版本73.0.3679.0的错误,错误日志指出它无法以某种方式加载特定脚本,但是我们仍然可以手动加载脚本。
解决方案:
使用Puppeteer 1.11.0版解决了此问题。
但是,如果要使用puppeteer版本1.12.2但使用不同的Chrome版本,则可以使用executablePath
参数。
这是在操纵up中使用的各个版本(目前是答案),
- 铬73.0.3679.0-木偶v1.12.2
- 铬72.0.3582.0-Puppeteer v1.11.0
- Chromium 71.0.3563.0-Puppeteer v1.9.0
- Chromium 70.0.3508.0-Puppeteer v1.7.0
- 铬69.0.3494.0-木偶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.json
。
1.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})
结果: