首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火狐不打开- cron,ruby,firewatir

火狐不打开- cron,ruby,firewatir
EN

Stack Overflow用户
提问于 2008-09-27 12:30:47
回答 2查看 2.2K关注 0票数 2

我已经写了一个红宝石脚本,它打开了火狐中的dlink管理页面,并进行ADSL连接或断开连接。

我可以在终端上运行这个脚本,没有任何问题。但是如果我把它说成是cron作业,它就不会启动firefox。

这是我在crontab中的条目。

代码语言:javascript
复制
# connect to dataone
55 17 * * * ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test

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

代码语言:javascript
复制
PROFILE: 
i486-linux
/usr/bin/firefox -jssh

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

代码语言:javascript
复制
#!/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

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-27 12:58:09

您需要有一个指向有效X服务器的显示环境。这可能涉及将其设置为":0.0“值(没有引号),从而引用本地标准显示。

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

代码语言:javascript
复制
Xvfb :1 -screen 0 1600x1200x32

然后,通过将DISPLAY变量设置为:1,就可以使用它了。

您正在启动一个完整的firefox实例,只需连接或断开调制解调器。您很可能使用"curl“向服务器发送适当的HTTP请求,以便它为您执行连接或断开连接。要想轻松了解应该重新创建什么,一种方法是安装火狐插件(如LiveHTTPHeaders ),并在手动执行操作时记下最重要的HTTP请求。

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

票数 3
EN

Stack Overflow用户

发布于 2008-09-27 12:54:22

从cron运行的程序没有您的交互环境。因此,它们没有并显示变量,因此您不能运行任何X(图形)程序,例如Firefox。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/143554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档