Coffeescript 幻影可以';无法打开文件名
我正在用phantomjs编写一点咖啡脚本来截图多个URL。但每次我尝试运行它时,都会收到一条错误消息,Coffeescript 幻影可以';无法打开文件名,coffeescript,screenshot,phantomjs,Coffeescript,Screenshot,Phantomjs,我正在用phantomjs编写一点咖啡脚本来截图多个URL。但每次我尝试运行它时,都会收到一条错误消息,无法打开。有什么好处?这是我的密码: page = require('webpage').create() page.viewportSize = width: 1024 height: 760 urls = phantom.args i = 1 for url in urls do (url) -> output = "scr
无法打开
。有什么好处?这是我的密码:
page = require('webpage').create()
page.viewportSize =
width: 1024
height: 760
urls = phantom.args
i = 1
for url in urls
do (url) ->
output = "screenshot-#{i}.png"
page.open url, (status) ->
if status isnt 'success'
console.log "Error opening url \"#{page.reason_url}\": #{page.reason}"
phantom.exit(1)
else
console.log "Page opened.."
window.setTimeout (->
page.clipRect =
top: 0
left: 0
width: 1024
height: 760
page.render(output)
), 200
i += 1
phantom.exit()
我试着注释一些内容,但似乎失败的部分是page.open(url)。奇怪的是,错误消息说文件本身无法打开。(顺便说一句:我认为第14行有剪切和粘贴错误。我相信您希望用{url}
代替{page.reason\u url}
)
我在这里看到两个问题,或者一个问题在几个方面表现出来
page.open
方法是异步的——这就是为什么它接受回调函数(您的(status)->…
东西)
这会导致代码出现两种类型的问题:
phantom.exit()
调用超出了for
循环(从第9行开始)和回调方法(从第12行开始)的范围
因为open
调用是异步的,当url
是['http://google.com“]
,的循环将调用页。打开('http://google.com/)
然后在页面完成加载或调用回调之前跳转到phantom.exit()
您需要延迟phantom.exit()
调用,直到page.render(output)
方法完成。在--page.render(output)
之后移动phantom.exit()
phantom.exit
,当多个URL被传递到您的程序时,您仍然会遇到问题。同样,由于page.open
是异步的,因此您可以快速连续多次调用page.open
(然后在加载所有这些页面之前退出)
此外,与常规的单一web浏览器选项卡一样,Phantom的页面
对象不能一次打开多个页面phantom.exit()
有几种方法可以实现这一点(谷歌搜索“nodejs异步for loop”或类似的东西),但根据您的需要,每次调用程序只呈现一个页面可能更容易
以下是您的程序版本,针对PhantomJS 2进行了更新,设置为只呈现一个URL:
system=require('system'))
page=require('webpage')。create()
page.viewportSize=
宽度:1024
身高:760
url=system.args[2]
output=“屏幕截图-#{Date.now()}.png”
page.open url,(状态)->
如果状态不是“成功”
console.error“错误打开url\”#{url}\:#{page.reason}”
幻影。出口(1)
其他的
console.log“页面已打开…”
window.setTimeout(->
page.clipRect=
排名:0
左:0
宽度:1024
身高:760
页面渲染(输出)
console.log“页面呈现…”
幻影。退出()
), 200
因为Phantom不再直接解析CoffeeScript,所以要运行它,首先需要“编译”到JavaScript,如下所示:
coffee-c foo.coffee
phantomjs foo.js“http://www.google.com/"
这似乎对我很有效。您是否尝试将“”作为第一个url附加?可能错误消息是有效的。是的,我尝试直接输入字符串,但似乎不起作用:(尝试硬编码?如
url=['http://google.com“]
这似乎也不起作用。我用一个简单的page.open就把它压缩到了最低限度”http://www.google.com“,(状态)->console.log”-->{status}”
但我得到了同样的错误无法打开'test.js.coffee'
我开始认为phantomjs的open方法有什么问题。我认为归结起来就是这段代码不起作用:page.open('http://github.com/“,(status)->console.log(“status:{status}”)page.render('github.png'))