Firefox는 오픈하지 않습니다 - Cron, Ruby, Firewatir
-
02-07-2019 - |
문제
Firefox에서 Dlink Admin 페이지를 열고 ADSL 연결 또는 단절을 수행하는 Ruby 스크립트를 작성했습니다.
문제 없이이 스크립트를 터미널에서 실행할 수 있습니다. 그러나 내가 Cron 작업으로 넣으면 Firefox를 발사하지 않습니다.
이것은 내가 가진 항목입니다 크론타 브
# 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- 서버를 가리키는 디스플레이 환경이 있어야합니다. 여기에는 ": 0.0"(따옴표없이) 값으로 설정하여 로컬 표준 디스플레이를 참조 할 수 있습니다.
그러나 명심해야 할 몇 가지 사항이 있습니다. X Virtual Frame Buffer (XVFB)를 실행할 수 있으므로 Firefox가 단순히 디스플레이로 사용합니다. 이는 Firefox가 모든 그래픽 작업을 수행 할 수 있지만 표준 그래픽 환경과 무관하다는 것을 의미합니다. XVFB 인스턴스를 가리킬 수 있도록 디스플레이 변수를 적절하게 설정해야합니다. 예를 들어, XVFB를 다음과 같이 호출하는 경우 :
Xvfb :1 -screen 0 1600x1200x32
그런 다음 디스플레이 변수를 다음과 같이 설정하여 이것을 사용할 수 있습니다.
모뎀을 단순히 연결하거나 분리하기 위해 본격적인 Firefox 인스턴스를 시작합니다. "CURL"을 사용하여 적절한 HTTP 요청을 서버로 보내서 연결 또는 연결을 끊을 수 있습니다. 재생산해야 할 것을 사소하게 볼 수있는 한 가지 방법은 LiveHttPheaders와 같은 Firefox 플러그인을 설치하고 수동으로 작업을 수행 할 때 가장 중요한 HTTP 요청을 기록하는 것입니다.
컬에 대한 루비 바인딩도 있습니다.루비를위한 libcurl. 결과 스크립트는 현재 스크립트보다 훨씬 작아야합니다.
다른 팁
CRON에서 실행되는 프로그램에는 대화식 환경이 없습니다. 따라서 변수가없고 표시되지 않으므로 Firefox와 같은 X (그래픽) 프로그램을 실행할 수 없습니다.
나는 Firefox를 자동화하려는 대신 Ruby에서 HTTP 연결을 직접 수행하는 것이 좋습니다.
Crontab 항목이 잘못되었습니다
같다
#min hour day month dow user command
55 17 * * * ur_user_is_missing ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test