将网页数据转换为只能在网页外运行的JavaScript

时间:2014-09-29 14:44:30

标签: javascript jquery node.js google-chrome google-chrome-extension

我正在制作一个Chrome扩展程序,将JavaScript注入某个论坛网站。当您在论坛上查看个人资料时,JavaScript使用jQuery向网页添加按钮。每个个人资料页面上都有一个链接,可以在论坛上显示该个人资料的所有帖子。 jQuery添加的按钮(通过chrome扩展名)应该使用每个个人资料页面上已有的“显示最后帖子”链接来浏览所有个人资料的最后帖子并查找实际上是新主题的帖子而不仅仅是回复其他帖子论坛上的主题。 chrome扩展程序的目的是显示所有配置文件的最后一个主题。

问题是我用来抓取网页的Node.js代码无法在网页的上下文中运行。我认为它不起作用,因为它使用节点模块'request'和'cheerio',它们没有browserify支持。

现在我只能通过在其代码中手动插入我想要删除的“显示最后帖子”页面的链接然后在我的本地命令提示符中执行它来运行Node.js scraper。所有这一切都有两个问题:

  1. 当有人点击Chrome扩展程序添加的按钮时,如何让Node.js执行程序执行运行网页的上下文

  2. 如何将chrome扩展内容脚本(jQuery按钮)中的“show last posts”链接发送给刮刀? (因为刮刀无法在浏览器中运行以获取链接本身)

  3. 请在回答之前提供一个号码,以便每个人都能分辨出您正在回答哪些问题。感谢

1 个答案:

答案 0 :(得分:0)

  1. 首先,您需要在扩展程序可以访问的服务器上运行Node scraper。

    您可以使用Heroku等服务托管服务器,之后您需要将服务器网址添加到清单文件permissions

    "permissions": [ "tabs",
        "*://link-to-your-herokuapp.herokuapp.com/*"
     ],
    
  2. 要将数据发送到服务器,您可以使用网址/getLastPost并将请求参数添加为/getLastPost?parameter=value&parameter2=value2。在您的情况下,您需要发送您可以执行getLastPost?link=someLinkHere之类的操作的链接(如果我没有记错的话)。然后在你的node.js scraper中添加一个URL控制器,如下所示:

    var url = require('url'); 
    app.get('/getLastPost', function(req, res){
        var url_parts = url.parse(req.url, true);
        var link = url_parts.query; //this would give you your link
        functionThatPerformsScraping(link); //send the link as a parameter to the function where you require the link
    });
    
  3. 我希望这足以让你开始。

    编辑:

    在这里查找Ajax:http://api.jquery.com/jquery.ajax/。这就是按钮点击

    所做的事情
    $('.some-btn-class').on('click', function(
        $.ajax({
            url:'link-to-herokuapp.herokuapp.com/getLastPost?link='+val,
        }).done(function(){
            //whatever needs to be performed once ajax is done
        });
    )});
    

    您似乎是Jquery和Node.js的新手。浏览不同的文档。