6

如何无头运行 JavaScript?

我正在寻找一个像 Scratchpad(出现在 Firefox 中)这样的选项,它可以在没有浏览器的情况下运行 JavaScript 并在特定网站上进行 DOM 操作,最好从命令行执行。

4

4 回答 4

5

我发现了一个类似的帖子,它对您的问题有一个相对最新的答案 - 从命令行运行基于 DOM 的 Javascript

主要问题是浏览器实际上是创建您想要与之交互的 DOM 的原因。因此,如果没有某种“浏览器”运行,我们就没有 DOM。但是有一些可用的工具(如 Selenium)可以自动/模拟启动浏览器、创建 DOM 和运行您的 javascript。

于 2020-09-30T19:49:56.540 回答
1

我已经看到在这里提到了很多暂存器(以及诸如暂存 js 之类的替代方案),但是您的回答特别要求提供替代方案。Node.js可以很好地用于此目的,但默认情况下不能操作 DOM。在这一点上,有两个选项可以用于稍有不同的包。一个叫做jsdom,并允许您从给定的源代码操作 DOM。既然您说您正在寻找像暂存器这样的解决方案,puppeteer也可能会起作用。它使用无头铬,让您以编程方式控制铬。我想你想要puppeteer,但从技术上讲,它使用浏览器,所以你可能想要jsdom.

脚步:

  1. 从https://nodejs.org/下载并安装 nodejs
  2. 选择是否要使用puppeteerjsdom(上面详述)。
  3. 为您的项目创建一个目录并更改为它:mkdir javascript && cd javascript
  4. npm使用(节点包管理器)初始化目录:npm init -y
  5. 如果您选择puppeteer
    • 安装 puppeteer:npm install puppeteer
    • 创建并编辑 index.js 以获得以下内容:
      const puppeteer = require('puppeteer');
      
      (async () => {
        const browser = await puppeteer.launch();
      
        const page = await browser.newPage();
        await page.goto('https://example.com');
      
        await page.addScriptTag({content:`
          document.querySelector('div>h1').textContent = 'Example Puppeteer'
        `})
        await page.evaluate(() => {
          document.querySelector('div>p').textContent = "Just another way to do things."
        });
        // this ^ is slightly different because in the
        // first the javascript is being injected as a
        // script tag, while in the second the div>p is
        // actually being manipulated. The first would
        // probably be closer to scratchpad though.
      
        await page.screenshot({path: 'screenshot.png'});
        await browser.close();  
      })();
      
    • node index.js
    • screenshot.png 的屏幕截图应该是被操纵的 DOM
  6. 如果您选择jsdom
    • 安装jsdom:npm install jsdom
    • 创建和编辑 index.js:
      const { JSDOM } = require('jsdom')
      const { document } = (new JSDOM(`<!DOCTYPE html><html><head></head><body><p>Hello</p></body></html>`)).window
      document.querySelector('p').textContent = 'Hello World!'
      console.log(document.querySelector('p').textContent) // Will output 'Hello World!'
      
    • node index.js
    • 您应该会看到“Hello World!” 在您的控制台中。
于 2020-10-02T01:20:24.427 回答
0

如果您使用的是谷歌浏览器,您需要安装一个名为 scratch js 的扩展程序,它将在那里可用,如果您想逐行运行您的代码,您可以在您的计算机中通过 cntrl + shift + i 检查,如果需要,可以转到控制台逐行运行javascript。如果你想运行整个程序,你必须安装 Scratch js 作为扩展

于 2020-10-01T11:03:05.683 回答
0

它不会从 unix 命令行运行。您需要从 firefox 提供的 Scratchpad 运行它。

当您的网站在 Firefox 中打开时,它将始终执行。

  1. 打开 www.google.com
  2. Shift + F4 打开便签本

写下代码

(function () {
  var
  getRandomValue = function () {
    var
    randomValue = Math.floor(Math.random() * (Math.pow(2, 16)))
    ;
    return randomValue
  },
  setFieldsToRandomValue = function () {
    document.getElementById('lst-ib').value = 'TEST' + (getRandomValue());

  }()
  ;
}())
  1. 按 CTRL + R

基本上暂存器用于执行 JAVASCRIPT 和 DOM 操作。您不能从 unix 命令运行它。

在此处输入图像描述

于 2018-07-19T12:24:07.600 回答