我写了一段代码,要在一个运行在cron作业上的脚本中调用,知道它必须是一个无头浏览器才能在cron作业中运行,我找到了Headless。这听起来像是一个美妙的宝石,完全按照我的意愿去做,唯一的问题是当我运行代码时它仍会打开FireFox。
我认为无头的全部意义在于不必访问显示器并在后台运行,例如:phantomjs。我错过了什么,或者我错了无头宝石应该完成的事情? (当我尝试使用时,底部的P.S.:phantomjs)
#encoding: utf-8
require 'watir-webdriver'
require 'headless'
#log into admin dashboard
headless = Headless.new
browser = Watir::Browser.start 'http://app.mycompany.com/admin'
browser.link(:xpath =>'/html/body/div/div/div/div/a').when_present.click
browser.text_field(:id => 'Email').when_present.set 'me@mycompany.com'
browser.button(:id => 'next').click
browser.text_field(:id => 'Passwd').when_present.set 'password'
browser.button(:id => 'signIn').click
browser.goto 'https://app.mycompany.com/admin/dashboard'
#browser is at dashboard to grab yesterday's numbers
code that grabs data
#closes browser after grabbing data
browser.close
headless.destroy
#send timestamp
current_time = Time.now
puts "Screen grabbed at " + current_time.inspect + "\n\n"
#puts all data into array then outputs array split on each metric's title
dailyreportdata = [my glorious array of data]
dailyreportdata.each_slice(2) { |x|
puts x.join
}
我的脚本运行完成,但数据没有显示,因此我猜测它在尝试加载浏览器时会进行故障转移,因此不会加载任何数据来抓取并发送到我的文件。
我的脚本看起来像这样:
#!/bin/sh
_now=$(date +"%m_%d_%Y")
ruby dailyreportscraper.rb > ~/dailyscrape_$_now.txt
如果我在cron作业之外运行它,它可以正常工作。
P.S。 - 我尝试过phantomjs,但每次进入“输入电子邮件”字段时,它都会等待元素出现 - 这是谷歌登录,所以可能与此有关,我甚至尝试使用xpath同样。
感谢您的帮助!
答案 0 :(得分:1)
执行headless.start
后致电headless = Headless.new
。
确保您正在运行Xvfb。