如何无头运行 JavaScript?
我正在寻找一个像 Scratchpad(出现在 Firefox 中)这样的选项,它可以在没有浏览器的情况下运行 JavaScript 并在特定网站上进行 DOM 操作,最好从命令行执行。
如何无头运行 JavaScript?
我正在寻找一个像 Scratchpad(出现在 Firefox 中)这样的选项,它可以在没有浏览器的情况下运行 JavaScript 并在特定网站上进行 DOM 操作,最好从命令行执行。
我发现了一个类似的帖子,它对您的问题有一个相对最新的答案 - 从命令行运行基于 DOM 的 Javascript
主要问题是浏览器实际上是创建您想要与之交互的 DOM 的原因。因此,如果没有某种“浏览器”运行,我们就没有 DOM。但是有一些可用的工具(如 Selenium)可以自动/模拟启动浏览器、创建 DOM 和运行您的 javascript。
我已经看到在这里提到了很多暂存器(以及诸如暂存 js 之类的替代方案),但是您的回答特别要求提供替代方案。Node.js可以很好地用于此目的,但默认情况下不能操作 DOM。在这一点上,有两个选项可以用于稍有不同的包。一个叫做jsdom
,并允许您从给定的源代码操作 DOM。既然您说您正在寻找像暂存器这样的解决方案,puppeteer
也可能会起作用。它使用无头铬,让您以编程方式控制铬。我想你想要puppeteer
,但从技术上讲,它使用浏览器,所以你可能想要jsdom
.
puppeteer
或jsdom
(上面详述)。mkdir javascript && cd javascript
npm
使用(节点包管理器)初始化目录:npm init -y
puppeteer
:
npm install puppeteer
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
jsdom
:
npm install jsdom
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
如果您使用的是谷歌浏览器,您需要安装一个名为 scratch js 的扩展程序,它将在那里可用,如果您想逐行运行您的代码,您可以在您的计算机中通过 cntrl + shift + i 检查,如果需要,可以转到控制台逐行运行javascript。如果你想运行整个程序,你必须安装 Scratch js 作为扩展
它不会从 unix 命令行运行。您需要从 firefox 提供的 Scratchpad 运行它。
当您的网站在 Firefox 中打开时,它将始终执行。
写下代码
(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());
}()
;
}())
基本上暂存器用于执行 JAVASCRIPT 和 DOM 操作。您不能从 unix 命令运行它。