gpt4 book ai didi

ruby - firefox 打不开 - cron, ruby​​, firewatir

转载 作者:数据小太阳 更新时间:2023-10-29 08:42:18 24 4
gpt4 key购买 nike

我写了一个 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

感谢任何帮助。

最佳答案

您需要有一个指向有效 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 的 ruby​​ 绑定(bind): libcurl for Ruby .生成的脚本应该比您当前的脚本小得多。

关于ruby - firefox 打不开 - cron, ruby​​, firewatir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/143554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com