使用phantomjs调用函数会得到与从控制台调用不同的结果
Calling function with phantomjs gives different result than calling from console
我想从这个页面获得NBA球员的统计数据。有一个UI按钮允许您将数据表转换为csv,我正在尝试将此过程自动化。在底层,它调用函数get_csv_output()
。
在巡检台上,get_csv_output("per_game")
和get_csv_output("advanced")
分别以csv格式输出#per_game
和#advanced
表。
然而,当我尝试使用phantom.js调用get_csv_output()
函数时,它只获取"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重复调用upvote(AJAX)函数吗
- 控制台.log触发,但随后的 Jquery 调用不执行任何操作
- 调用Javascript时出现控制台错误
- “期望赋值或函数调用,而是看到了表达式.” - 不必要的控制台.log
- Grails:多个加载ajax调用,但只有一个打印到控制台
- 当控制台不在't在chrome中打开,有些项目不再可点击(有些js调用停止工作)
- 为什么 Javascript 在控制台.log之后没有被调用
- 检测何时从控制台调用函数的最佳方法
- 为什么我的 ajax 调用不将数据存储在数据库中?没有 PHP 或控制台错误
- 如何从浏览器控制台禁用 JavaScript 函数调用
- 包装“控制台.log”并保留调用堆栈
- 如何防止从 JavaScript 控制台调用 'Meteor.call'
- 从谷歌浏览器控制台内部调用主干视图方法
- 我无法让它作为 JavaScript 函数工作(我在控制台时得到我想要的返回值.log但我不能将其作为函数调用)
- ngTagInput在通过指令调用时给出了一个javascript控制台错误
- 使用 AOP 的方法调用前后的 Javascript 控制台输出
- 如何从控制台调用该方法以查看其工作情况
- Chrome JavaScript 开发者控制台:是否可以在没有换行符的情况下调用 console.log()
- 我如何防止jQuery调用控制台为我的SignalR聊天
- 如何在Firefox插件中调用控制台调试面板