我需要像 Jasmine 中的假计时器一样管理浏览器中的时间,以避免长时间等待实时测试结果。
我正在尝试获取被浏览器阻止的请求列表(HTTPS 站点上的 HTTP)。我试过
page.on('requestfailed', request => {
console.log(request.url());
console.log('failed');
});
Run Code Online (Sandbox Code Playgroud)
但它没有提供请求。我看到的唯一请求是那些不再存在的 URL。被阻止的 (HTTP) 请求也不会触发请求事件。
page.on('request', request => {
console.log(request.url());
}
Run Code Online (Sandbox Code Playgroud)
还有其他活动我可以收听吗?
编辑:
当我使用时我可以看到有些东西失败了
page._client.on('Network.loadingFailed', async event => {
const request = await page._networkManager._requestIdToRequest.get(event.requestId);
console.log(event);
console.log(request);
});
Run Code Online (Sandbox Code Playgroud)
但请求变量未定义。所以我不知道哪个请求失败了。
为什么我无法看到的console.log在我的消息page.evaluate,page.$,page.$$,page.$eval,page.$$eval
并不能以访问变量的是?
let variable = 0;
const divColors = await page.evaluate(() => {
const divs = Array.from(document.querySelectorAll('.map-filters div'));
let text = divs.map((element, index) => {
console.log(element.textContent)
variable =1;
return element.style.color;
})
return text;
})
Run Code Online (Sandbox Code Playgroud)
为什么我不能做variable=1,console.log(element.textContent)在这个例子中?
我正在尝试设置用于下载的自定义路径,但 chromeDownloads无论如何都会将文件放入典型文件夹中。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath: 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe',
defaultViewport: {
width: 1920,
height: 1080
},
headless: false,
userDataDir: "./user_data"
});
const page = await browser.newPage();
await page.goto(
'https://example.com/page-with-the-file-link',
{ waitUntil: 'domcontentloaded' },
);
await page._client.send('Page.setDownloadBehavior', {
behavior: 'allow',
downloadPath: 'C:/Users/Me/Downloads/custom/folder/'
});
console.log('Start downloading');
await page.click('a.download-btn');
await page.waitFor(5000);
console.log('Complete');
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
因此,它忽略downloadPath选项并将文件放入默认C:/Users/Me/Downloads文件夹。
它也不会等待 5 秒,它只有时间下载文件并在单击下载链接后立即退出。
Start downloading
Complete
(node:51016) UnhandledPromiseRejectionWarning: Error: WebSocket is …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下代码通过 Puppeteer在https://moz.com/login上登录到Moz:
const puppeteer = require('puppeteer');
const creds = {
email: "myemail",
password: "mypassword"
};
(async () => {
const browser = await puppeteer.launch({
args: [
'--disable-web-security',
],
headless: false
});
const page = await browser.newPage();
await page.goto("https://moz.com/login");
await page.$eval("input[name=email]", (el, value) => el.value = value, creds.email);
await page.$eval("input[name=password]", (el, value) => el.value = value, creds.password);
await Promise.all([
page.$eval("input[type=submit]", elem => elem.click()),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)
我知道我传递的电子邮件和密码是正确的,因为我可以使用它们手动登录,但是当我运行上面的脚本时,我在表单上方收到“无效的电子邮件或密码”错误。
Chrome 中的 JS 控制台记录了两个错误:
无法加载资源:服务器无法加载资源:服务器与404状态响应()cs.moz.com/id?d_visid_ver=1.10.0&d_fieldgroup=A&mcorgid=2C702C1653CF9B460A490D4B%40AdobeOrg&mid=86471825972219878023490878783607186756&ts=1564059866100:1 …
我在 Heroku 上使用 Puppeteer,但收到以下错误:
Failed to launch the browser process! /usr/src/app/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/master/docs/troubleshooting.md
Run Code Online (Sandbox Code Playgroud) 有谁知道为什么在已经有 Protractor 的情况下 Google 决定开发 Puppeteer?(专用于 Angular)
我制作了一个在我的计算机上运行良好的 node.js 网络抓取代码,但是,当我部署到运行 Debian 的 Google Cloud VM 实例时,它会返回特定网站的超时错误。我已经为 puppeteer 尝试了许多不同的设置,但似乎都不起作用。我相信当我从谷歌云服务器运行时,我试图抓取的网站会阻止我的代码,但当我从我的计算机运行时不会。抓取部分在我的电脑上运行良好。Puppeteer 找到 HTML 标签并检索信息。
const puppeteer = require('puppeteer');
const GoogleSpreadsheet = require('google-spreadsheet');
const { promisify } = require('util');
const credentials = require('./credentials.json');
async function main(){
const scrapCopasa = await scrapCopasaFunction();
console.log('Done!')
}
async function scrapCopasaFunction() {
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
});
const page = await browser.newPage();
//await page.setDefaultNavigationTimeout(0);
//await page.setViewport({width: 1366, height: 768});
await page.setUserAgent('Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36');
await page.goto('http://www.copasa.com.br/wps/portal/internet/abastecimento-de-agua/nivel-dos-reservatorios');
//await …Run Code Online (Sandbox Code Playgroud) javascript node.js web-scraping google-cloud-platform puppeteer
我尝试通过 puppetter 生成 pdf 文件。它适用于一页,但是当我尝试生成多页 pdf 文档时,我有一个分页符的错误。HTML模板用于下面的生成。如果可以,请你帮助我。复制的前提条件:以 100% 的高度填充第一页并为下面的块添加标题。
HTML模板
function getHTMLTemplate(
height = 'auto',
component = '<div></div>',
style = '<style></style>',
header = '<div></div>',
footer = '<div></div>',
) {
return `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>HTML to PDF Example</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {margin: 0; padding: 0; border-spacing: 0;}
.page {
width: 210mm;
height: ${height};
overflow: hidden;
background: transparent;
margin-top: -1px !important;
margin-bottom: -1px !important;
}
body>div {
width: 100%;
position: fixed; …Run Code Online (Sandbox Code Playgroud) 我在使用 dotenv 时遇到此错误:
(async () => {
^
TypeError: require(...).config(...) is not a function
Run Code Online (Sandbox Code Playgroud)
Evertyghing 工作正常,直到我需要 dotenv。
这是代码
const puppeteer = require('puppeteer');
const fs = require('fs');
require('dotenv').config()
(async () => {
const browser = await puppeteer.launch({
headless: false,
args: ['--start-maximized'],
defaultViewport: null,
});
const page = await browser.newPage();
...more code here
})()
Run Code Online (Sandbox Code Playgroud)
Dotenv 已正确安装:
"dependencies": {
"dotenv": "^8.2.0",
"puppeteer": "^5.3.1"
}
Run Code Online (Sandbox Code Playgroud) puppeteer ×10
node.js ×6
javascript ×4
automation ×2
web-scraping ×2
angular ×1
dotenv ×1
heroku ×1
jestjs ×1
pdf ×1
protractor ×1
require ×1
selenium ×1
typeerror ×1