使用浏览器在页面(客户端)上运行自定义JavaScript来模拟点击?怎么做

Use browser to run custom JavaScript on page (client side) to simulate clicking? How to do?

本文关键字:模拟 JavaScript 自定义 运行 浏览器 客户端      更新时间:2023-09-26

我想自动从页面中获取一些内容。

我想知道这是否可能:

  1. 页面加载后,在页面上运行我自己编写的JavaScript(我使用FireFox。我没有能力更改页面内容。我只想在浏览器上运行JS。)。脚本将使用getelementbyid或类似方法获得下一页的链接

  2. 运行JavaScript来收集我在该页面上感兴趣的内容(一些URL),并将这些URL存储在本地文件中

  3. 转到下一页(我的浏览器会真正加载下一页,但我根本不需要干预),然后重复步骤1和步骤2,直到没有下一页为止。

实现这一点的经典方法是使用LWP编写Perl脚本或使用CURL等编写PHP脚本。但这都是服务器端的问题。我想知道我是否可以在客户端完成。

实际上,我做了一些类似的事情。

通过使用GreaseMonkey,您可以编写一个用户脚本,该脚本将根据需要与页面交互。您可以获得下一页链接,并根据自己的喜好滚动内容。

您还可以通过一些名为GM_getValue和GM_setValue的新函数在Firefox中本地存储任何数据。

我采取懒散的方式。我只是生成一个长长的URL列表,这些URL是我在浏览页面时找到的。我做了一个粗糙的"document.write"方法,并将我的URL列表转储为一个批处理文件,该文件在wget上进行规则处理。

在这一点上,我复制并粘贴批处理文件,然后运行它

如果你需要经常运行它,它应该是自动化的,使用可以将GreaseMonkey脚本转换为Firefox扩展,从而获得更强大的功能。

另一个选项目前是AFAIK,仅Chrome。您可以收集所需的任何信息,并从中构建一个大文件,然后使用链接的download属性,单击即可保存内容。

更新

我本来打算分享我正在做的事情的完整代码,但它与特定的网站联系在一起,不会有真正的帮助——所以我会选择一个更"通用"的解决方案。

警告,此代码是动态键入的,实际可能不正确。

// Define the container
// If you are crawling multiple pages, you'd want to load this from
// localStorage.
var savedLinks = [];
// Walk through the document and build the links.
for (var i = 0; i < document.links.length; i++) {
  var link = document.links[i];
  var data = { 
    url: link.url,
    desc = getText(link)
  };
  savedLinks.push(data);
}
// Here you'd want to save your data via localStorage.

// If not on the last page, find the 'next' button and load the next page
// [load next page here]
// If we *are* on the last page, use document.write to output our list.
// 
// Note: document.write totally destroys the current document.  It really is quite
// an ugly way to do it, but in this case it works.
document.write(JSON.stringify(savedLinks, null, 2));

Selenium/webdriver将允许您编写一个简单的java/ruby/php应用程序,该应用程序将启动Firefox,并使用其JavaScript引擎在浏览中与页面交互。

或者,如果网页不需要JavaScript来提供你感兴趣的内容,你可以使用你喜欢的语言的html解析器,而不使用浏览器。

如果你想在Firefox中用JavaScript做这件事,你可能可以用一个防油渍的脚本

来做