使用浏览器在页面(客户端)上运行自定义JavaScript以模拟单击?如何做?

使用浏览器在页面(客户端)上运行自定义JavaScript以模拟单击?如何做?,javascript,browser,ide,console,automation,Javascript,Browser,Ide,Console,Automation,我想自动从页面抓取一些内容 我想知道是否可能: 加载页面后,在页面上运行我自己编写的JavaScript(我使用FireFox。我无法更改页面内容。我只想在浏览器上运行JS)。脚本将使用getelementbyid或类似的方法获取到下一页的链接 运行JavaScript收集该页面上我感兴趣的内容(一些URL),并将这些URL存储在本地文件中 转到下一页(我的浏览器将加载下一页,但我根本不需要干预),重复步骤1和步骤2,直到没有下一页 实现这一点的经典方法是使用LWP编写Perl脚本,或者使用CU

我想自动从页面抓取一些内容

我想知道是否可能:

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

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

  • 转到下一页(我的浏览器将加载下一页,但我根本不需要干预),重复步骤1和步骤2,直到没有下一页


  • 实现这一点的经典方法是使用LWP编写Perl脚本,或者使用CURL编写PHP脚本,等等,但这都是服务器端的。我想知道我是否能在客户端做这件事。

    实际上,我也做了类似的事情

    通过使用GreaseMonkey,您可以编写一个用户脚本,根据需要与页面进行交互。你可以得到下一页的链接并随意滚动

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

    我走懒散的路。我只是在浏览页面时生成一长串URL。我使用了一个粗糙的“document.write”方法,并将URL列表作为一个批处理文件转储,该批处理文件在
    wget
    上进行规则处理

    此时,我复制并粘贴批处理文件,然后运行它

    如果您需要经常运行它,使其自动化,那么过去有一种方法可以将GreaseMonkey脚本转换为Firefox扩展,从而获得更强大的功能

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

    更新

    我本来打算分享我正在做的全部代码,但是它与某个特定的网站联系太紧密了,所以我会选择一个更“通用”的解决方案

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

    // 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));
    
    //定义容器
    //如果您正在抓取多个页面,您可能希望从
    //本地存储。
    var savedLinks=[];
    //浏览文档并建立链接。
    对于(var i=0;i
    Selenium/webdriver将让您编写一个简单的java/ruby/php应用程序,启动Firefox,使用其JavaScript引擎与浏览页面交互

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


    如果您想在Firefox中使用JavaScript,您可能可以使用greasemonkey脚本来执行此操作

    没有直接写入客户端文件的方法。这是一种安全风险,因此您需要使用ajax或页面提交来编写文件。如果您不拥有这些页面,并且不介意在每个页面上手动重新运行javascript(即通过firebug运行脚本),那么您可以完成所有这些,但我认为这将非常耗时。听起来像是网页爬行,我很确定你最好在服务器端进行。Hi@ScrapsedCola:我可能无法很好地表达我的意图:我想让我的Javascript运行Firebug之类的东西(但Firebug无法做到这一点。它只能调试页面附带的JS)。若它不能写入本地文件,那个么也可以写入控制台。我可以复制和粘贴——虽然不是我所需要的,但我也可以接受。谢谢。你可以通过Firebug运行js。打开萤火虫。单击控制台选项卡。底部有一个命令行(在>>>旁边有一个红色框,在右侧有一个红色框)。单击右侧的红色框(上面有白色箭头)。在框中剪切并粘贴JS代码,然后单击该框底部的Run。请看:您甚至不需要剪切和粘贴整个代码。您可以编写一个简短的1行程序,将您的js文件添加到页面,以便在页面托管在某个位置时运行(使用IIS和本地主机可能会工作,请使用您的计算机完全限定的名称)。完全忘记GreaseMonkey。谢谢,@jeremy非常有帮助。“我试试看。”杰里米,你能解释一下你正在做的事情的细节吗?你想在这里干什么?你如何处理“文档。编写”?@JeremyJStarcher谢谢!出于好奇,你在哪里输入了这段代码来使用它——控制台、JS scratchpad、Firebug、新的Greasemonkey脚本等等?@Coldblackice这一切都取决于你的需要。在我的例子中,我把它作为GreaseMonkey脚本的一部分,这样它就可以遍历整个远程站点并收集各种信息。然而,如果你只需要从一个页面上抓取信息,控制台会很笨拙,但却能正常工作。