【问题标题】:firefox not opening - cron, ruby, firewatirfirefox 未打开 - cron,ruby,firewatir
【发布时间】:2010-09-13 16:48:53
【问题描述】:

我编写了一个 ruby​​ 脚本,它在 Firefox 中打开 dlink 管理页面并进行 ADSL 连接或断开连接。

我可以毫无问题地在终端中运行这个脚本。但如果我把它作为 cron 作业,它不会启动 firefox。

这是我在 crontab

中的条目
# connect to dataone
55 17 * * * ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test

我在 /tmp/cron_test 中看到以下条目。所以看起来脚本确实运行了。

PROFILE: 
i486-linux
/usr/bin/firefox -jssh

但我不明白为什么我没有看到 Firefox 开放,让这种自动化工作。这是/home/raguanu/Dropbox/nettie.rb

#!/usr/bin/ruby -w

require 'rubygems'
require 'firewatir'
require 'optiflag'

module Options extend OptiFlagSet
    character_flag :d do
        long_form 'disconnect'
        description 'Mention this flag if you want to disconnect dataone'
    end

    flag :l do 
        optional 
        long_form 'admin_link'
        default 'http://192.168.1.1'
        description 'Dlink web administration link. Defaults to http://192.168.1.1'
    end

    flag :u do
        optional 
        long_form 'user'
        default 'admin'
        description 'Dlink administrator user name. Defaults to "admin"'
    end

    flag :p do 
        optional 
        long_form 'password'
        default 'admin'
        description 'Dlink administrator password. Defaults to "admin"'
    end

    flag :c do 
        optional 
        long_form 'connection_name'
        default 'bsnl'
        description 'Dataone connection name. Defaults to "bsnl"'
    end

    extended_help_flag :h do
        long_form 'help'
    end

    and_process!
end

class DlinkAdmin
    include FireWatir   

    def initialize(admin_link = "http://192.168.1.1", user = 'admin', pwd = 'admin')
        @admin_link, @user, @pwd = admin_link, user, pwd
    end

    def connect( connection_name = 'bsnl' ) 
        goto_connection_page connection_name

        # disconnect prior to connection
        @browser.button(:value, 'Disconnect').click

        # connect
        @browser.button(:value, 'Connect').click

        # done!
        @browser.close
    end

    def disconnect( connection_name = 'bsnl' )
        goto_connection_page connection_name

        # disconnect
        @browser.button(:value, 'Disconnect').click

        # done!
        @browser.close      
    end

    private
    def goto_connection_page( connection_name = 'bsnl')
        @browser ||= Firefox.new
        @browser.goto(@admin_link)

        # login
        @browser.text_field(:name, 'uiViewUserName').set(@user)
        @browser.text_field(:name, 'uiViewPassword').set(@pwd)
        @browser.button(:value,'Log In').click

        # setup > dataone
        @browser.image(:alt, 'Setup').click
        @browser.link(:text, connection_name).click
    end
end

admin = DlinkAdmin.new(Options.flags.l, Options.flags.u, Options.flags.p)

unless Options.flags.d?
    admin.connect( Options.flags.c )
else
    admin.disconnect( Options.flags.c )
end

感谢任何帮助。

【问题讨论】:

    标签: ruby firefox automation cron firewatir


    【解决方案1】:

    crontab 条目错误

    好像

    #min  hour  day  month  dow  user                command
    55    17    *    *      *    ur_user_is_missing  ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
    

    【讨论】:

    • 用户字段仅对系统 crontab 是必需的,不是每个用户的个人 crontab。
    • @mana:道格拉斯是对的。我可以在没有用户名的情况下运行 cron 作业。另外,正如您在问题中看到的那样,我可以让 cron 作业运行。只是我在显示器上看不到 Firefox。
    【解决方案2】:

    从 cron 运行的程序没有您的交互式环境。因此它们没有和 DISPLAY 变量,因此您不能运行任何 X(图形)程序,例如火狐。

    我建议自己使用 ruby​​ 进行 HTTP 连接,而不是尝试自动化 Firefox。

    【讨论】:

      【解决方案3】:

      您需要有一个指向有效 X 服务器的 DISPLAY 环境。这可能涉及将其设置为值“:0.0”(不带引号),以便它引用您的本地标准 DISPLAY。

      但有几点需要牢记: 您可以运行 X 虚拟帧缓冲区 (xvfb),以便 Firefox 简单地将其用作显示。这意味着 Firefox 将能够执行其所有图形操作,但它将独立于您的标准图形环境。您必须适当地设置 DISPLAY 变量,使其指向 xvfb 实例。例如,如果您按如下方式调用 xvfb:

      Xvfb :1 -screen 0 1600x1200x32
      

      然后您可以通过将 DISPLAY 变量设置为 :1 来使用它

      您正在启动一个成熟的 firefox 实例来简单地连接或断开调制解调器。您很可能能够使用“curl”向服务器发送适当的 HTTP 请求,以便它为您执行连接或断开连接。轻松查看应该重新创建的内容的一种方法是安装 Firefox 插件,例如 LiveHTTPHeaders,并在手动执行操作时记下最重要的 HTTP 请求。

      甚至还有一个用于 curl 的红宝石绑定: libcurl for Ruby。生成的脚本应该比您当前的脚本小得多。

      【讨论】:

      • 另请注意,仅设置 DISPLAY 变量可能不足以加入现有显示,因为可能存在必须通过环境变量定位的配置文件和授权文件。例如权威
      • @Roshan 和@Douglas: crontab 中的 DISPLAY = :0.0 解决了这个问题。我同意我可以用更轻松的方法来完成它。我正在尝试使用 FireWatir,所以目前这对我来说似乎很有用。当我有机会时,我会尝试更轻松的方法。再次感谢。
      • +1 - firefox --display=:0.0 URL 为我解决了同样的问题...谢谢。
      猜你喜欢
      • 2011-07-06
      • 1970-01-01
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      相关资源
      最近更新 更多