【问题标题】:How to open a new tab and close it almost immediately after running a script on the new tab如何在新选项卡上运行脚本后几乎立即打开新选项卡并关闭它
【发布时间】:2014-09-16 05:44:09
【问题描述】:

我对 Javascript 和编程相当陌生,并且一直在尝试制作一个 chrome 扩展程序来监控用户在特定网站上查看的任何产品的价格,并在价格发生变化时通知用户。我正在抓取 DOM 以获取价格。 我希望扩展程序每 5 小时访问一次页面并抓取 DOM 并更新价格。

我认为可以帮助我做到这一点的两种方法是使用 PhantomJs 或让我的扩展程序使用保存的 URL 打开一个新选项卡,运行脚本以抓取并立即关闭它。

如何以新标签方式或 Phantom 方式进行操作?

我尝试了 window.open(url, '_blank') 并设置了超时但没有帮助。 尝试使用 iframe 但无法访问框架中的文档。

如果我没有遵守提问准则,请原谅。这是我的第一个。

【问题讨论】:

  • 也许你应该尝试另一种方法。将<iframe> 嵌入到您的背景页面中,或者如果内容不是动态的,则使用 XHR 获取页面。
  • 我看不出 phantomjs 如何融入 chrome 扩展的世界。你肯定需要一个 phantomjs 进行抓取的服务器。

标签: javascript jquery dom google-chrome-extension phantomjs


【解决方案1】:

假设内容不是动态加载的,我认为您不必打开一个新标签来执行此操作。我只会发出一个 HTTP 获取请求来接收要抓取的页面 HTML。这可以用普通的javascript来完成

function httpGet(theUrl)
{
    var xmlHttp = null;

    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

或使用 jQuery

$.get(
    "somepage.php",
    {paramOne : 1, paramX : 'abc'},
    function(data) {
       alert('page content: ' + data);
    }
);

收到响应后,您可以使用 jQuery.parseHTML 或类似的东西将其转换为一个 DOM 节点数组,您可以随心所欲地抓取这些节点。

【讨论】:

  • 请注意,您必须add the domain to the config 才能让跨域请求通过。不过你可以遇到problems
  • 另外,如果内容是动态加载的,这将不起作用。然后,iframe 或真正的选项卡是唯一的选择。
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多