源代码。
var page = require('webpage').create();
page.onConsoleMessage = function(msg) {
console.log(msg);
};
page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
if ( status === "success" ) {
interval = setInterval(function(){
console.log("executed");
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
var result = page.evaluate(function() {
console.log($("#USDJPY_bid").text());
});
});
}, 3000);
}
});
有效。
>phantomjs --web-security=false sample.js
executed
102.6
executed
102.6
102.6
executed
102.6
102.6
102.6
我想通过jQuery重新加载数据。首先它连接到网站,并重复执行jQuery并保持连接。
每次调用时,console.log的数量都会增加。它只发生在Includejs内部。我只需要调用一次。
答案 0 :(得分:0)
如果你仔细观察,你会发现页面中已经包含了jQuery,所以你不需要自己包含它。这就足够了:
page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
if ( status === "success" ) {
interval = setInterval(function(){
var result = page.evaluate(function() {
console.log($("#USDJPY_bid").text());
});
}, 3000);
}
});
如果你仍想要包含你的jQuery版本,那么你应该只一次:
page.open("http://info.finance.yahoo.co.jp/fx/", function(status) {
if ( status === "success" ) {
var loaded = false;
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
loaded = true;
});
setInterval(function(){
if (!loaded) return;
page.evaluate(function() {
console.log($("#USDJPY_bid").text());
});
}, 3000);
}
});
仅在没有--web-security=false
标志的情况下才能在我的机器上运行。奇怪的是,我必须将includeJs
与setInterval
分开。