小编vse*_*byt的帖子

在所有脚本和页面加载完成后如何获取所有 html 数据?(傀儡师)

最后我想出了如何使用 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 个项目更多的数据。

javascript parsing node.js web-scraping puppeteer

12
推荐指数
4
解决办法
2万
查看次数

Puppeteer:从网站获取 localStorage

我需要使用 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)

javascript local-storage node.js web-scraping puppeteer

12
推荐指数
2
解决办法
6287
查看次数

Node js 堆检查器中的全局句柄和 GC 根是什么?

我正在尝试检查正在运行的 Express Node js 应用程序的堆。

在堆转储比较中,看起来有些字符串没有被释放。它们所绑定的承诺已得到解决,但 Retainers 链会上升到全局句柄,然后上升到 GC 根。我不明白这些是什么意思。

有人可以阐明这一点吗?为什么 GC 无法收集这些已解决的 Promise?

Node.js 堆快照

garbage-collection memory-management v8 node.js node-inspector

6
推荐指数
1
解决办法
1535
查看次数

Puppeteer chrome 允许多个文件下载

我正在尝试抓取一个网站上的多个 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)

download chromium node.js web-scraping puppeteer

6
推荐指数
1
解决办法
2396
查看次数

Puppeteer - 如何更改文档中某些页面的方向?

我正在使用 Puppeteer 创建一个 30 页长的 pdf,其中一些页面需要横向排列。如何仅为页面 x 和页面 y 指定它?

javascript pdf node.js puppeteer

5
推荐指数
1
解决办法
3374
查看次数

为什么下拉菜单在节点项目的 ejs 文件中不起作用?

我在 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)

html javascript ejs node.js

5
推荐指数
1
解决办法
891
查看次数

Puppeteer:搜索内部文本不区分大小写

我正在尝试使用 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)

javascript xpath node.js web-scraping puppeteer

5
推荐指数
1
解决办法
2375
查看次数

如何使用元素标题的一部分在 Puppeteer 或 Playwright 中查找元素?

我需要测试这个元素何时出现在 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 playwright

5
推荐指数
1
解决办法
2366
查看次数

如何将 puppeteer“挂钩”到正在运行的 Chrome 实例/选项卡中

是否可以以某种方式将 puppeteer 附加到正在运行的 Chrome 实例(手动启动的浏览器),然后在选项卡内接管控制权?我假设它最终与使用该--no-sandbox标志启动 Chrome 浏览器有关,但不知道如何从那里继续。

谢谢你的帮助

javascript automation node.js puppeteer

4
推荐指数
1
解决办法
4013
查看次数

如何将pdf文件转换为base64

我正在尝试将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)

javascript node.js handlebars.js puppeteer

4
推荐指数
1
解决办法
6188
查看次数