[RUBY] script para loguearse en una web e ir a una url

Iniciado por ferminako, 30 Octubre 2012, 13:29 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Cita de: ferminako en  1 Noviembre 2012, 20:51 PM
hay un problema tio los links llevan tildes... y  peta por el utf8... he pasado en vez de las tildes el correspondiente codificado como ó  y similares pero peta iwal. Tienes solucion???

que trabajo me das  :-X en realidad es culpa mía por no prevenir una posible incompatibilidad de caracteres xD

PD: Asegúrate de guardar el login.txt en codificación ANSI sinó no va a funcionar.

Código (ruby) [Seleccionar]
# -*- coding: ISO-8859-1 -*-

# 5ª edición

require 'watir-webdriver'

if not ARGV.empty? then FILE = ARGV[0] else FILE = 'C:\Windows\Login.txt' end

File.open(FILE, 'r+').each_line do |line|
   if line['URL']         then $URL         = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['USER_TYPE']   then $USER_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['USER_NAME']   then $USER_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['USER_TEXT']   then $USER_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['PASS_TYPE']   then $PASS_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['PASS_NAME']   then $PASS_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['PASS_TEXT']   then $PASS_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['BUTTON_TYPE'] then $BUTTON_TYPE = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end    
   if line['BUTTON_NAME'] then $BUTTON_NAME = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['LINK1_TYPE']  then $LINK1_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end    
   if line['LINK1_NAME']  then $LINK1_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['LINK2_TYPE']  then $LINK2_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end    
   if line['LINK2_NAME']  then $LINK2_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
end

print "

INFO:

[+] URL:
   #{$URL}

[+] Usuario:
   Atributo = #{$USER_TYPE}
   Nombre   = #{$USER_NAME}
   Texto    = #{$USER_TEXT}

[+] Contraseña:
   Atributo = #{$PASS_TYPE}
   Nombre   = #{$PASS_NAME}
   Texto    = #{$PASS_TEXT}

[+] Botón:
   Atributo = #{$BUTTON_TYPE}
   Nombre   = #{$BUTTON_NAME}

[+] Link 1:
   Atributo = #{$LINK1_TYPE}
   Nombre   = #{$LINK1_NAME}

[+] Link 2:
   Atributo = #{$LINK2_TYPE}
   Nombre   = #{$LINK2_NAME}

"

browser = Watir::Browser.new
browser.goto($URL)
browser.text_field($USER_TYPE => $USER_NAME).set $USER_TEXT
browser.text_field($PASS_TYPE => $PASS_NAME).set $PASS_TEXT
browser.button($BUTTON_TYPE=> $BUTTON_NAME).click
browser.link($LINK1_TYPE=> $LINK1_NAME).click
browser.link($LINK2_TYPE=> $LINK2_NAME).click
#browser.close


# Valores para XXXX_TYPE: id, title, name, tag_name, value, index, text, etc...
# Importante: No dejar espacios en las líneas entre el caracter "="

URL=http://foro.elhacker.net/login.html

USER_TYPE=name
USER_NAME=user
USER_TEXT=Nombre de usuario

PASS_TYPE=name
PASS_NAME=passwrd
PASS_TEXT=Contraseña

BUTTON_TYPE=tag_name
BUTTON_NAME=Ingresar

LINK1_TYPE=text
LINK1_NAME=Dudas Generales

LINK2_TYPE=text
LINK2_NAME=Dud´´´´as Generales


ejecutable: http://exoshare.com/download.php?uid=VOXC0Q9I








ferminako

#21
Citarque trabajo me das   en realidad es culpa mía por no prevenir una posible incompatibilidad de caracteres xD

Lo se y te pido disculpas por el lio, a la vez que te lo agradezco ;)  funciona perfecto!!! ya sabes para temas de desarrollo aki estoy ;) me mandas un mp o un mail ok??

Un saludo!

ferminako

Vale  ya tengo ruby, me iniciado he creado nas cuantas clases y demas , esta interesante.

Tambien he compilado mis programas con ocra.

Pero al intentar  compilar tu escript pero con watir el de ie, en vez del de mozilla , que  evidentemente e preinstalado , obtengo este error:
C:\>ocra --output navegante.exe navegante.rb
=== Loading script to check dependencies


INFO:

[+] URL:
   http://ggg.es/privado

[+] Usuario:
   Atributo = name
   Nombre   = usuario
   Texto    = admin

[+] Contraseña:
   Atributo = name
   Nombre   = clave
   Texto    = gfgfddf

[+] Botón:
   Atributo = tag_name
   Nombre   = Acceder

[+] Link 1:
   Atributo = text
   Nombre   = Actualización

[+] Link 2:
   Atributo = text
   Nombre   = Exportar Artículos Ahora

C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-classic/elemen
t.rb:66:in `assert_exists': Unable to locate element, using {:tag_name=>"Acceder
"} (Watir::Exception::UnknownObjectException)
       from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-c
lassic/element.rb:419:in `perform_action'
       from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-c
lassic/element.rb:276:in `click!'
       from C:/Ruby193/lib/ruby/gems/1.9.1/gems/watir-classic-3.3.0/lib/watir-c
lassic/element.rb:218:in `click'
       from C:/navegante.rb:59:in `<top (required)>'
       from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ocra-1.3.0/bin/ocra:1146:in `lo
ad'
       from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ocra-1.3.0/bin/ocra:1146:in `<t
op (required)>'
       from C:/Ruby193/bin/ocra:23:in `load'
       from C:/Ruby193/bin/ocra:23:in `<main>'

C:\>

Eleкtro

postea el script que tienes para comprobar que todo está correctamente :-/

Si estás usando esta línea en tu script, eliminala y deja que termine la ejecución, con watir y watir-webdriver a mi también me daba problemas:
Código (ruby) [Seleccionar]
exit if Object.const_defined?(:Ocra)

un saludo








ferminako

es tu script simplemente he cambiado la gema por la de ie:
# -*- coding: ISO-8859-1 -*-


require 'watir'

if not ARGV.empty? then FILE = ARGV[0] else FILE = 'C:\Windows\Login.txt' end

File.open(FILE, 'r+').each_line do |line|
    if line['URL']         then $URL         = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['USER_TYPE']   then $USER_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['USER_NAME']   then $USER_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['USER_TEXT']   then $USER_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['PASS_TYPE']   then $PASS_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['PASS_NAME']   then $PASS_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['PASS_TEXT']   then $PASS_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['BUTTON_TYPE'] then $BUTTON_TYPE = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['BUTTON_NAME'] then $BUTTON_NAME = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['LINK1_TYPE']  then $LINK1_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['LINK1_NAME']  then $LINK1_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['LINK2_TYPE']  then $LINK2_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['LINK2_NAME']  then $LINK2_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
end

print "

INFO:

[+] URL:
    #{$URL}

[+] Usuario:
    Atributo = #{$USER_TYPE}
    Nombre   = #{$USER_NAME}
    Texto    = #{$USER_TEXT}

[+] Contraseña:
    Atributo = #{$PASS_TYPE}
    Nombre   = #{$PASS_NAME}
    Texto    = #{$PASS_TEXT}

[+] Botón:
    Atributo = #{$BUTTON_TYPE}
    Nombre   = #{$BUTTON_NAME}

[+] Link 1:
    Atributo = #{$LINK1_TYPE}
    Nombre   = #{$LINK1_NAME}

[+] Link 2:
    Atributo = #{$LINK2_TYPE}
    Nombre   = #{$LINK2_NAME}

"

browser = Watir::Browser.new
browser.goto($URL)
browser.text_field($USER_TYPE => $USER_NAME).set $USER_TEXT
browser.text_field($PASS_TYPE => $PASS_NAME).set $PASS_TEXT
browser.button($BUTTON_TYPE=> $BUTTON_NAME).click
browser.link($LINK1_TYPE=> $LINK1_NAME).click
browser.link($LINK2_TYPE=> $LINK2_NAME).click
#browser.close

Eleкtro

#25
El problema es que hay algo que Ocra está omitiendo (según parece algo de AutoIt), y aparte de eso watir se hace complicado de compilar con ocra así que...

usa el buscador de windows y copia la dll "autoitx3.dll" de la carpeta "win32ole" de Ruby, la copias junto a tu script para añadir manualmente la dll, así:
ocra navegante.rb AutoItX3.dll

Con este script:
Código (ruby) [Seleccionar]
# -*- coding: ISO-8859-1 -*-

require 'watir'
require 'watir-classic'

exit if Object.const_defined?(:Ocra)

AutoIt_dll = "\"" + File.dirname(__FILE__).gsub("/","\\")+"\\AutoItX3.dll" + "\""

if not ARGV.empty? then FILE = ARGV[0] else FILE = 'C:\Windows\Login.txt' end

File.open(FILE, 'r+').each_line do |line|
   if line['URL']         then $URL         = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['USER_TYPE']   then $USER_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['USER_NAME']   then $USER_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['USER_TEXT']   then $USER_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['PASS_TYPE']   then $PASS_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['PASS_NAME']   then $PASS_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['PASS_TEXT']   then $PASS_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['BUTTON_TYPE'] then $BUTTON_TYPE = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['BUTTON_NAME'] then $BUTTON_NAME = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['LINK1_TYPE']  then $LINK1_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['LINK1_NAME']  then $LINK1_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
   if line['LINK2_TYPE']  then $LINK2_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
   if line['LINK2_NAME']  then $LINK2_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
end

print "

INFO:

[+] URL:
   #{$URL}

[+] Usuario:
   Atributo = #{$USER_TYPE}
   Nombre   = #{$USER_NAME}
   Texto    = #{$USER_TEXT}

[+] Contraseña:
   Atributo = #{$PASS_TYPE}
   Nombre   = #{$PASS_NAME}
   Texto    = #{$PASS_TEXT}

[+] Botón:
   Atributo = #{$BUTTON_TYPE}
   Nombre   = #{$BUTTON_NAME}

[+] Link 1:
   Atributo = #{$LINK1_TYPE}
   Nombre   = #{$LINK1_NAME}

[+] Link 2:
   Atributo = #{$LINK2_TYPE}
   Nombre   = #{$LINK2_NAME}

"

system("regsvr32 /s AutoIt_dll")

browser = Watir::Browser.new
browser.goto($URL)
browser.text_field($USER_TYPE => $USER_NAME).set $USER_TEXT
browser.text_field($PASS_TYPE => $PASS_NAME).set $PASS_TEXT
browser.button($BUTTON_TYPE=> $BUTTON_NAME).click
browser.link($LINK1_TYPE=> $LINK1_NAME).click
browser.link($LINK2_TYPE=> $LINK2_NAME).click
#browser.close

system("regsvr32 /u /s AutoIt_dll")


PD: A mi me tira error todo el rato del OLE porque no tengo internet explorer, pero creo que te debería funcionar como está.

saludos








ferminako

#26
He probado primero a compilar con la gema de mozilla con el ejemplo que funcionaba por descartar que sea problema de mi configuración y compila correctamente.
Dicho esto... he probado con la dll que me comentas y al compilar me da un error pero se cierra la cmd  y no puedo capturarlo mas que imprimiendo pantalla asi q te lo dejo como imagen ... :P


Por cierto como detectaste el posible error, y llegaste a la conclusionde la dll???

Por cierto la dll no la tiene mi sistema a si que la descargue  y puse donde tengo el rb para poder compilarlo con ocra.... nose si ademas debo meterlo en windows en alguna carpeta...
Gracias

EDITO:
Ahora que me doy cuenta tengo al gema watir pero no la clasic...  pero al e bajado  y vuelto a probar y sale lo mismo.

Eleкtro

#27
El intérprete te dice el error, solo hay que pararse a leer, así lo deducí xD, luego busqué en San Google y me topé con esto: http://johnallen.us/?p=278

fíjate en el nuevo error de la imagen que has posteado, require no puede cargar "win32/registry"

Ocra no me daba ese error, pero bueno, parece que se a olvidado de incluirla en tu equipo, añade esto al script de antes:
Código (ruby) [Seleccionar]
require 'win32/registry'

Y usa esta dll para asegurarnos: exoshare.com/download.php?uid=NZ2SSJII

PD: La dll no hay que meterla en ninguna carpeta, se incluye dentro del exe porque según lei Ocra omite esa dll con Watir, no la incluye y por lo tanto tampoco la registra.

saludos








ferminako

Algo hemos avanzado,he metido tu dll, ya abre le browser y mete datos, pero falla  al intentar acceder, relacionado con watir-clasic no?

el codigo es
# -*- coding: ISO-8859-1 -*-

require 'watir'
require 'watir-classic'
require 'win32/registry'

exit if Object.const_defined?(:Ocra)

AutoIt_dll = "\"" + File.dirname(__FILE__).gsub("/","\\")+"\\AutoItX3.dll" + "\""

if not ARGV.empty? then FILE = ARGV[0] else FILE = 'C:\Windows\Login.txt' end

File.open(FILE, 'r+').each_line do |line|
    if line['URL']         then $URL         = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['USER_TYPE']   then $USER_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['USER_NAME']   then $USER_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['USER_TEXT']   then $USER_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['PASS_TYPE']   then $PASS_TYPE   = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['PASS_NAME']   then $PASS_NAME   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['PASS_TEXT']   then $PASS_TEXT   = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['BUTTON_TYPE'] then $BUTTON_TYPE = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['BUTTON_NAME'] then $BUTTON_NAME = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['LINK1_TYPE']  then $LINK1_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['LINK1_NAME']  then $LINK1_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
    if line['LINK2_TYPE']  then $LINK2_TYPE  = line.split('=').last.chomp.force_encoding("ISO-8859-1").to_sym end
    if line['LINK2_NAME']  then $LINK2_NAME  = line.split('=').last.chomp.force_encoding("ISO-8859-1")        end
end

print "

INFO:

[+] URL:
    #{$URL}

[+] Usuario:
    Atributo = #{$USER_TYPE}
    Nombre   = #{$USER_NAME}
    Texto    = #{$USER_TEXT}

[+] Contraseña:
    Atributo = #{$PASS_TYPE}
    Nombre   = #{$PASS_NAME}
    Texto    = #{$PASS_TEXT}

[+] Botón:
    Atributo = #{$BUTTON_TYPE}
    Nombre   = #{$BUTTON_NAME}

[+] Link 1:
    Atributo = #{$LINK1_TYPE}
    Nombre   = #{$LINK1_NAME}

[+] Link 2:
    Atributo = #{$LINK2_TYPE}
    Nombre   = #{$LINK2_NAME}

"

system("regsvr32 /s AutoIt_dll")

browser = Watir::Browser.new
browser.goto($URL)
browser.text_field($USER_TYPE => $USER_NAME).set $USER_TEXT
browser.text_field($PASS_TYPE => $PASS_NAME).set $PASS_TEXT
browser.button($BUTTON_TYPE=> $BUTTON_NAME).click
browser.link($LINK1_TYPE=> $LINK1_NAME).click
browser.link($LINK2_TYPE=> $LINK2_NAME).click
#browser.close

system("regsvr32 /u /s AutoIt_dll")

Y en la cmd para compilar:
ocra navegante.rb AutoItX3.dll

Eleкtro

¿El error solo lo tienes al usar ocra?
prueba así:

Código (ruby) [Seleccionar]
browser.link(:text => /$LINK1_NAME/).click
browser.link(:text => /$LINK2_NAME/).click