最后我想出了如何使用 Node.js。安装了所有库/扩展。所以 puppeteer 正在工作,但就像以前使用 Xmlhttp 一样......它只获取页面的模板/正文,没有所需的信息。几秒钟后,页面上的所有脚本都会在浏览器(Web 应用程序?)中打开它。加载整个页面后,我需要获取某些标签内的信息。另外,我会问,是否可以使用纯 JavaScript,因为我不使用 jQuery 之类的代码。所以对我来说难度加倍...
这是我到目前为止所拥有的。
const puppeteer = require('puppeteer');
const $ = require('cheerio');
let browser;
let page;
const url = "really long link with latitude and attitude";
(async () => puppeteer
.launch()
.then(await function(browser) {
return browser.newPage();
})
.then(await function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(await function(html) {
$('strong', html).each(function() {
console.log($(this).text());
});
})
.catch(function(err) {
//handle error
}))();
Run Code Online (Sandbox Code Playgroud)
我只在强标签中获得模板默认正文元素。但它应该包含比 10 个项目更多的数据。
我需要使用 Puppeteer 获取网站保存的所有数据:cookies 和 localStorage(例如登录后)。我已阅读所有 Puppeteer 文档,但找不到有关 localStorage 的任何信息。
我可以获取 cookie,但我不知道如何获取 localStorage。例如:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto('https://www.twitter.com/')
//
// code for login
//
const returnedCookie = await page.cookies();
console.log(returnedCookie)
// const localStorage = ??
// console.log(localStorage)
await browser.close()
})()
Run Code Online (Sandbox Code Playgroud) 我正在尝试检查正在运行的 Express Node js 应用程序的堆。
在堆转储比较中,看起来有些字符串没有被释放。它们所绑定的承诺已得到解决,但 Retainers 链会上升到全局句柄,然后上升到 GC 根。我不明白这些是什么意思。
有人可以阐明这一点吗?为什么 GC 无法收集这些已解决的 Promise?
garbage-collection memory-management v8 node.js node-inspector
我正在尝试抓取一个网站上的多个 pdf 文件。但下载第一个后,chrome 要求我允许该网站下载多个文件。

我们可以在启动浏览器时允许这样做吗?一旦我手动允许并下载所有文件,这个代码就可以工作。
for(selector of selectors){
await this.currentPage._client.send('Page.setDownloadBehavior', { behavior: 'allow', downloadPath: downloadFilePath });
await this.currentPage.waitFor(1000);
await this.currentPage.evaluate(el => el.click(), selector);
await this.currentPage.waitFor(1000 * 20);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 Puppeteer 创建一个 30 页长的 pdf,其中一些页面需要横向排列。如何仅为页面 x 和页面 y 指定它?
我在 nodejs 项目的 .ejs 文件中包含了 javascript 和 bootstrap。bootstrap css 适用于按钮(例如 btn btn-primary 作品),但下拉菜单不起作用。
//我的index.ejs文件
<!DOCTYPE html>
<html>
<head>
<title>Home automation system</title>
<script src="js/bootstrap.min.js"></script>
<script src="js/myscript.js"></script>
<link rel="stylesheet" href="/css/bootstrap.min.css">
<link rel="stylesheet" href="/css/mycss.css">
</head>
<body>
<div class="container">
<div class="test text-center" style="margin-bottom:0">
<h1>Home Automation system</h1>
<p>The first Home Automation system in Bhutan</p>
</div>
<% include partials/navbar.ejs %>
<br><br>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 puppeteer 搜索不区分大小写的内部文本。
我读过这个:case insensitive xpath contains() possible?
例如我有这个元素:
<div>
<span>Test One</span>
<span>Test Two</span>
<span>Test Three</span>
</div>
Run Code Online (Sandbox Code Playgroud)
我尝试过这个但不成功:
const element = await page.$x("//span//text()[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'two')]");
Run Code Online (Sandbox Code Playgroud) 我需要测试这个元素何时出现在 DOM 上。我想用“标题”来表达这一点。NBA 部分始终保持不变,另一部分“0c381941-0”是动态的。
我试过
await page.waitForSelector('.identifier.identifier-group[title=`NBA ${idVariable}`)
但这些反引号在那里是不可接受的。
有什么线索吗?
<dl class="identifier identifier-group" title="NBA 0c381941-0">
<dl class="player-identifier-label identifier" title="NHI 0c381941-0">
<dt><span>NBA</span></dt>
<dd><span>0c381941-0</span></dd>
</dl>
</dl>
Run Code Online (Sandbox Code Playgroud) 是否可以以某种方式将 puppeteer 附加到正在运行的 Chrome 实例(手动启动的浏览器),然后在选项卡内接管控制权?我假设它最终与使用该--no-sandbox标志启动 Chrome 浏览器有关,但不知道如何从那里继续。
谢谢你的帮助
我正在尝试将pdf转换为base64并作为附件发送到电子邮件,但我无法转换为base64而不是创建一个文件,我想将其转换为base64,以便我可以作为附件发送。这里是代码
const fs = require("fs");
const path = require("path");
const utils = require("util");
const puppeteer = require("puppeteer");
const hb = require("handlebars");
const readFile = utils.promisify(fs.readFile);
(async () => {
const A = "invoice";
const htmlContent = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h2>Approve Page ,${A}</h2>
</body>
</html>
`;
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setContent(htmlContent);
await page.pdf({ path: "html.pdf", format: "A4" });
await browser.close();
})(); …Run Code Online (Sandbox Code Playgroud) node.js ×9
puppeteer ×8
javascript ×7
web-scraping ×4
automation ×1
chromium ×1
download ×1
ejs ×1
html ×1
parsing ×1
pdf ×1
playwright ×1
v8 ×1
xpath ×1