firefox non si apre - cron, ruby, firewatir
-
02-07-2019 - |
Domanda
Ho scritto uno script ruby ??che apre la pagina di amministrazione di dlink in Firefox e fa una connessione o disconnessione ADSL.
Potrei eseguire questo script nel terminale senza alcun problema. Ma se lo metto come cron job, non si accende firefox.
Questa è la voce che ho in crontab
# connect to dataone
55 17 * * * ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test
Vedo le seguenti voci in / tmp / cron_test. Quindi sembra che lo script sia stato effettivamente eseguito.
PROFILE:
i486-linux
/usr/bin/firefox -jssh
Ma non sono riuscito a capire perché non ho visto aprire Firefox, perché questa automazione funzionasse. Ecco /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
Qualsiasi aiuto è apprezzato.
Soluzione
Devi avere un ambiente DISPLAY che punta a un X-server valido. Ciò potrebbe comportare l'impostazione del valore "0,0:" (senza virgolette), in modo tale che faccia riferimento al DISPLAY standard locale.
Ci sono alcune cose da tenere a mente: È possibile eseguire un buffer di frame virtuale X (xvfb), in modo che Firefox lo usi semplicemente come viene visualizzato. Ciò significherebbe che Firefox sarebbe in grado di fare tutte le sue operazioni grafiche, ma che sarebbe indipendente dal tuo ambiente grafico standard. Dovrai impostare la variabile DISPLAY in modo appropriato in modo che punti all'istanza xvfb. Ad esempio, se invochi xvfb come segue:
Xvfb :1 -screen 0 1600x1200x32
Quindi potrai usarlo impostando la variabile DISPLAY su: 1
Stai avviando un'istanza completa di Firefox per connettere o disconnettere semplicemente il tuo modem. Molto probabilmente saresti in grado di utilizzare " curl " per inviare le richieste HTTP appropriate al server, in modo tale che esegua una connessione o disconnessione per l'utente. Un modo banale per vedere cosa dovresti ricreare sarebbe installare un plug-in Firefox come LiveHTTPHeaders e annotare le richieste HTTP più importanti mentre esegui le azioni manualmente.
Esiste anche un legame rubino per il ricciolo: libcurl for Ruby . Lo script risultante dovrebbe essere molto più piccolo del tuo script corrente.
Altri suggerimenti
I programmi eseguiti da cron non hanno il tuo ambiente interattivo. Pertanto non hanno una variabile DISPLAY e quindi non è possibile eseguire alcun programma X (grafico), ad es. Firefox.
Suggerirei di fare tu stesso le connessioni HTTP, in ruby, piuttosto che provare ad automatizzare Firefox.
la voce crontab è errata
è come
#min hour day month dow user command
55 17 * * * ur_user_is_missing ruby /home/raguanu/Dropbox/nettie.rb >> /tmp/cron_test