Javascript Phantomjs无法通过aspx从HTML网站获取刷新的内容

Javascript Phantomjs无法通过aspx从HTML网站获取刷新的内容,javascript,phantomjs,Javascript,Phantomjs,我想实时更新网站上显示的值 网站: 目标html元素id:font26粗体cls ff arial 我一直在使用phantomjs代码,如下所示 var page = require('webpage').create(); page.open('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', function(status) { var last_value = -1 setInterval(function()

我想实时更新网站上显示的值 网站: 目标html元素id:font26粗体cls ff arial

我一直在使用phantomjs代码,如下所示

var page = require('webpage').create();
page.open('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', function(status) {
  var last_value = -1

  setInterval(function() {
    var value = page.evaluate(function() {
      return document.getElementsByClassName('font26 bold cls ff-arial')[0].innerText
    })

    if (value != last_value) {
      console.log("Value as been updated to " + value)
      last_value = value
    }
  }, 1000)
//  phantom.exit()
})
屏幕截图如下:

问题是,当代码第一次运行时,它能够获取值,但之后,值被缓存,无法更新

甚至试过

var needle = require('needle');
const cheerio = require('cheerio')
needle.get('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', 
function(error, response) {
  if (!error && response.statusCode == 200){
    const $ = cheerio.load(response.body)
    var value = $('#font26 bold cls ff-arial').html()
    console.log(value)
  }

});

不幸的是,目标页面上所需的值不会实时更新,因此我们必须将间隔移出
页面。打开
回调到主范围,并根据需要刷新页面:

var page = require('webpage').create();

var last_value = -1;

setInterval(function() {

    page.open('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', function(status) {

        var value = page.evaluate(function() {
          return document.getElementsByClassName('font26 bold cls ff-arial')[0].innerText
        })

        if (value != last_value) {
            console.log("Value as been updated to " + value)
            last_value = value;
        }
    });

}, 3000)
显然,最好不要太频繁地访问目标站点,还应该添加有效的用户代理,设置真实的分辨率并旋转IP

p.S.

只需查看页面的源代码,您甚至不需要PhantomJS,因为HTML中就有
26696
。您可以使用任何脚本服务器端语言获得它

节点迁移更新

你几乎做对了!细微差别影响了选择器的组成。因为所有这些类都属于一个元素,所以您需要像这样将它们放下来:

const needle = require('needle');
const cheerio = require('cheerio')

setInterval(function(){
    needle.get('http://www.aastocks.com/en/stocks/market/bmpfutures.aspx', 
    function(error, response) {
      if (!error && response.statusCode == 200){
        const $ = cheerio.load(response.body)
        var value = $('.font26.bold.cls.ff-arial').html().trim()
        console.log(value)
      }
    })
}, 1000)

你为什么认为它被缓存了?它应该很好用。考虑将选择器更改为<代码>文档.QuestS选择器('.TCP-NETX-TD2-2.最后一个).InEntult<代码>以便于测试,然后间隔将在每次滚动数据时检测到变化。@ VavelOf您可以看到该值未被更新,在您尝试的时候,市场可能被关闭,因此值保持不变。我用截图更新了我的问题,可能是页面没有刷新。您可以再次尝试
打开
同一页面,如果可以,请再试一次。@SaurabhAgrawalnope,页面本身正在刷新(不刷新网站),它是一个实时更新的网页。我的意思是,它在Chrome中也不刷新。您确定它必须实时工作吗?您在普通浏览器中看到了吗?它似乎工作正常,但我这里有一个错误TypeError:undefined不是一个函数(评估'this.getResponseHeader(“X-AdSource”)。includes(“PSA”))不确定它是否会影响性能。我正在寻找高度稳定的方法,因为我将在一天中大约14小时内每秒调用刷新。对其他脚本服务器端语言有什么建议吗?我尝试过php,但每秒都能得到结果,这看起来不稳定。Phantomjs比我目前使用的更稳定,我对其他更稳定/高效的解决方案持开放态度!这个错误与页面上的广告有关,这是无关紧要的。我坚信,在这种情况下,任何其他解决方案的性能都会更高,因为PhantomJS是一个完整的(尽管是无头的)浏览器,它在打开页面时会加载各种脚本、广告和图像,从而影响性能。我也不确定它每秒钟能运行多长时间。我建议使用node.js和一些轻量级模块来获取URL,比如,然后用解析HTML,然后可能用daemonize所有这些,我尝试了wt u suggest,但失败了,你可以看到我的编辑帖子。如果你能用你建议的工作代码更新你的答案,那就太好了,我会奖励你这个赏金。通常我会建议你为此提出一个新问题,但你已经完成了96%的新解决方案,所以我在更新答案时只修改了一点代码。