【问题标题】:Get HTML content update of an URL获取 URL 的 HTML 内容更新
【发布时间】:2019-03-05 21:51:54
【问题描述】:

基本上我想更新网络内容, https://www.investing.com/indices/indices-futures

在道指 30 中,最后一个值正在自我更新(来自 Investing.com 服务器的实时更新),我想知道是否有任何方法可以捕获值的变化无需请求再次访问网站,以便我可以异步更新我的代码。由于我在网上找到的有关更改通知的所有内容都是基于他们自己的 html,但在我的情况下,它是外部 url,所以我在这里要求获得一些见解

【问题讨论】:

  • 您想从站点获取更新数据而不向站点请求更新数据?除非他们提供推送通知 API 服务,否则答案是否定的。
  • @DaveS 是的,无需调用另一个 http 请求即可观察到变化

标签: javascript node.js real-time-updates real-time-data


【解决方案1】:

您可以在 chrome 控制台中添加一些代码,并每秒跟踪此值以通知您。

let last_value = -1
let class_selector = 'pid-8873-last'
setInterval(function() {
  let v = document.getElementsByClassName(class_selector)[0].innerText
  if (v != last_value) {
    console.log("Value as been updated to " + v)
    last_value = v
  }
}, 1000)

> Value as been updated to 25,799.5
> Value as been updated to 25,798.5

但您必须打开浏览器,并在值更新时创建 ajax 请求。 如果您不想要任何浏览器,但要运行到服务器中,您可以查看PhantomJS


使用 PHANTOMJS 编辑

它们是用于 PhantomJS 的一些更新。

  • 您需要将let 替换为var
  • 文档不可访问,因此您需要使用评估
  • https 可能需要添加--ssl-protocol=any

./test.js

var page = require('webpage').create();
page.open('https://www.investing.com/indices/indices-futures', function(status) {
  var last_value = -1

  setInterval(function() {
    var value = page.evaluate(function() {
      return document.getElementsByClassName('pid-8873-last')[0].innerText
    })

    if (value != last_value) {
      console.log("Value as been updated to " + value)
      last_value = value
    }
  }, 1000)
//  phantom.exit()
})

然后在同一个目录下运行:

# phantomjs test.js 
Value as been updated to 25,799.0

【讨论】:

  • 控制台代码工作正常,但是当我尝试使用 PhantomJS 并将代码添加到函数 open(url, function (status) {} 时,它不起作用,关于将代码放在哪里的任何想法在 PhantomJS 中?
  • 您当前的答案效果很好,但是在诸如 aastocks.com/tc/stocks/market/bmpfutures.aspx 类 id(div): font26 bold cls ff-arial 之类的站点上,phantomjs 似乎没有刷新数据?我试图清除缓存,但仍然无法解决。有什么想法吗?
【解决方案2】:

我认为你需要检查一下什么是 websocket。这将是一个很酷的开始; https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

【讨论】:

  • Websocket 工作正常,但您需要一个服务器来联系并在数据更新时向您发送数据。在这种情况下,网站没有 api
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 2013-07-24
  • 2017-10-16
  • 2015-03-26
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多