javascript - 使用 phantomjs 调用函数给出的结果与从控制台调用的结果不同

标签 javascript phantomjs

我正在尝试从此 page 获取 NBA 球员统计数据。有一个 UI 按钮允许您将数据表转换为 csv,我正在尝试自动化此过程。在幕后,它正在调用函数 get_csv_output() .

在检查器控制台中,get_csv_output("per_game")get_csv_output("advanced")输出 #per_game#advanced分别为 csv 格式的表。

但是,当我尝试调用get_csv_output()时使用 phantom.js 的函数,它只获取“per_game”表的 csv 数据,但不适用于“advanced”表。

var page = require('webpage').create();
page.open('http://www.basketball-reference.com/players/a/abdulka01.html', function() {
    var result = page.evaluate(function() {
     return get_csv_output("per_game");
    });
    console.log(result);
    phantom.exit()
});

其输出是 csv 格式的 per_game 表,正如预期的那样。但是,当我尝试将其更改为 get_csv_output("advanced") 时,

输出是Converting from PRE-Formatted to CSV does not work, please <span class=tooltip onClick="window.location.reload()">Reload</span> and then click CSV

我尝试提供一些其他表 ID 作为输入,而 per_game 似乎是唯一有效的。

最佳答案

问题已解决,现在可以使用了:

function on_init (page){
page.viewportSize = {width:1600,height:900}
page.evaluate(function (){
window.screen = {width:1600,height:900,availWidth:1600,availHeight:900};
window.innerWidth=1600;  window.innerHeight=900;   window.outerWidth=1600;  window.outerHeight=900;
window.navigator = {
plugins: {length: 2, 'Shockwave Flash': {name: 'Shockwave Flash', filename: '/usr/lib/flashplugin-nonfree/libflashplayer.so', description: 'Shockwave Flash 11.2 r202', version: '11.2.202.440'}},
mimeTypes: {length: 2, "application/x-shockwave-flash": {description: "Shockwave Flash", suffixes: "swf", type: "application/x-shockwave-flash", enabledPlugin: {name: 'Shockwave Flash', filename: '/usr/lib/flashplugin-nonfree/libflashplayer.so', description: 'Shockwave Flash 11.2 r202', version: '11.2.202.440'}}},
appCodeName: "Mozilla",
appName: "Netscape",
appVersion: "5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36",
cookieEnabled: 1,
languages: "en-US,en",
language: "en",
onLine: 1,
doNotTrack: null,
platform: "Linux x86_64",
product: "Gecko",
vendor: "Google Inc.",
vendorSub: "",
productSub: 20030107,
userAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36",
geolocation: {getCurrentPosition: function getCurrentPosition(){},watchPosition: function watchPosition(){},clearWatch: function clearWatch(){}},
javaEnabled: function javaEnabled(){return 0} };});};
var page = require('webpage').create();
page.onInitialized=function(){on_init(page)}
page.open('http://www.basketball-reference.com/players/a/abdulka01.html', function() {
    var result = page.evaluate(function() {
     return get_csv_output("advanced");
    });
    console.log(result);
    phantom.exit()
});

./phantomjs test.js >>/dev/stdout

关于javascript - 使用 phantomjs 调用函数给出的结果与从控制台调用的结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40518041/

相关文章:

javascript - 改变边框颜色Javascript

javascript - 如何将数据传递给 ng-include Controller ?

javascript - 在 javascript 中用不同的数字替换数组元素

javascript随机8位特定数字

javascript - phantomjs 总是在 Windows 上给出解析错误

javascript - 为什么 PhantomJS 渲染页面使用 window.setTimeout

javascript - 如何将 requestAnimationFrame 与 setInterval 一起使用?

docker 容器上的 phantomJS

python - 如何在 Raspberry Pi 上安装 PhantomJS 以与 Python Selenium 一起使用?

javascript - 使用 phantom js 获取 css 值