Javascript Phantomjs无法通过aspx从HTML网站获取刷新的内容
我想实时更新网站上显示的值 网站: 目标html元素id:font26粗体cls ff arial 我一直在使用phantomjs代码,如下所示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()
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%的新解决方案,所以我在更新答案时只修改了一点代码。