¿Cómo puedo obtener el código de verificación de texto de formato cuando se hace el acceso al sitio de automóviles en Perl?

StackOverflow https://stackoverflow.com/questions/2331956

Pregunta

Estoy jugando con Win32 :: IE: Mechanize para tratar de acceder a algunos sitios de autenticación requerida de forma automática. Hasta ahora he logrado un éxito moderado, por ejemplo, puedo iniciar sesión automáticamente en mi buzón de correo yahoo. Pero encuentro muchos sitios están utilizando algún tipo de mecanismo de verificación de la imagen, que se llama posiblemente de CAPTCHA. No puedo hacer nada con ellos. Pero uno de los sitios que estoy tratando de acceso automático es el uso de un código de verificación de texto sin formato. Se comnposed de cuatro dígitos, seleccionables y copiable. Pero no están en el archivo de origen que puede ser exagerado utilizando

$mech->content;

Me buscó la palabra clave que aparece en la página web pero no en el archivo de origen a través de todos los archivos en los archivos temporales de Internet, pero todavía no puede encontrarlo.

¿Alguna idea de lo que está pasando? Yo sospechaba que el código de verificación de alguna manera estaba oculto en algún archivo de cookies pero me parece que no puede encontrarlo: (

El siguiente es el código que completa todos los requisitos campos excepto el código de verificación:

use warnings;
use Win32::IE::Mechanize;

my $url = "http://www.zjsmap.com/smap/smap_login.jsp";
my $eccode = "myeccode";
my $username = "myaccountname";
my $password = "mypassword";
my $verify = "I can't figure out how to let the script get the code yet"

my $mech = Win32::IE::Mechanize->new(visible=>1);
$mech->get($url);
sleep(1); #avoids undefined value error
$mech->form_name("BaseForm");
$mech->field(ECCODE => $eccode);
$mech->field(MEMBERACCOUNT => $username);
$mech->field(PASSWORD => $password);
$mech->field(verify => $verify);
$mech->click();

Como siempre cualquier sugerencia / comentario será muy apreciada:)

Actualizar

He descubierto una manera no tan inteligente como para resolver este problema. Por favor comentario en mi propia asnwer publica a continuación. Gracias como siempre:)

¿Fue útil?

Solución 4

Gracias a james2vegas, Zoul y Shoban.

Por fin he descubierto por mi cuenta un no tan inteligente, pero camino al-menos-viable para resolver el problema que se describe aquí. Me gustaría compartir aquí. Creo que el enfoque sugerido por @ james2vegas es probablemente mucho mejor ... pero de todos modos estoy aprendiendo en el camino.

Mi enfoque es la siguiente:

A pesar de que el código de verificación no está en el archivo de origen, pero ya que todavía es seleccionable y copiable, no puedo dejar que mi copia de la escritura todo en la página de inicio de sesión y luego extraer el código de verificación.

Para ello, utilizo las funciones SendKeys en el módulo Win32 :: Guitest que ver "Seleccionar todo" y "copia" a la página de inicio de sesión.

Luego uso Win32: portapapeles para obtener el contenido del portapapeles y luego Regexp para extraer el código. Algo como esto:

$verify = Win32::Clipboard::GetText();
$verify =~ s/.* (\d{4}).*/$1/msg;

Algunas reflexiones:

El número aleatorio se genera por algo como esto en Perl     mi random_number $ = int (rand (8999)) + 1000; random_number #var = rand (1000,10000); Y entonces se comprueba si $ verificar == $ random_number. No sé cómo capturar el valor de una sola sesión de sólo $ random_number. Creo que se almacena en algún lugar de la memoria. Si puedo capturar el valor directamente, entonces no me he ido a muchos problemas del uso de este módulo y que adicional.

Otros consejos

Esta es la razón por la que están allí. Al programa de parada como la suya para hacer cosas automatizado; -)

  

a captcha o Captcha es un tipo de   prueba de desafío-respuesta utilizado en   de cómputo para asegurar que la respuesta   No es generada por un ordenador.

Esto parece ser un número irrelevante. La página utiliza en 3 lugares: generarla; mostrarla en el formulario al lado del campo de entrada para ello; y la comprobación de valor de entrada es igual al número aleatorio elegido. Es decir, se trata de un cheque de sólo cliente. Sin embargo, si deshabilita el javascript, parece que, supongo, galletas importantes no reciben conjunto. Si se puede ejecutar código JavaScript en el contexto de la página (que debe ser capaz de con una llamada al método get y un javascript URI), puede cambiar el valor de random_number a F. E. 42 y de relleno que en en el formulario.

El código se inserta mediante JavaScript - Desactivar la JS, vuelva a cargar la página y ver desaparecer. Usted tiene que buscar a través del código JS para tener una idea de dónde viene y cómo replicar a él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top