Capturar captcha del webbrowser

Iniciado por .:Weeds:., 11 Octubre 2010, 21:19 PM

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

.:Weeds:.

Wenas gente, he encontrado la siguiente web
http://www.cmt.es/cmt_ptl_ext/SelectOption.do?nav=estado_num
Se trata de una web que pones el número y te saca la operadora, y no parece ser fake, el get es el siguiente
http://www.cmt.es/cmt_ptl_ext/SelectOption.do?tb_numMov="NUMERO SIN COMILLAS"&tbCaptcha="CAPTCHA SIN COMILLAS"&Submit=Buscar+&validar=si&tipo=buscar&nav=estado_num&pagina=&detalles=&nombre=&download=&idDetalle=&tipo=&categoria=
Tengo pensado en un form que escribas el número y en un picturebox te muestre la captcha, rellenas los numeros de la captcha y al darle a aceptar te haga el get y te diga el número de la operadora... voi algo perdido sobre que me muestre la imagen de la captcha en el picturebox y sobretodo en sacar la operadora, en el codigo fuente no he encontrado nada.


He probado lo siguiente para sacar el captcha en un picture box
Código (vbnet) [Seleccionar]
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
WebBrowser1.Navigate("http://www.cmt.es/cmt_ptl_ext/SelectOption.do?nav=estado_num")
End Sub

Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
For Each captcha As HtmlElement In WebBrowser1.Document.Images
Dim turing = captcha.GetAttribute("SRC")
If turing.Contains("Captcha.jpg") Then
PictureBox1.Load(turing)
End If
Next
End Sub

pero me muestra una captcha distinta  :huh:

Se os ocurre algo?  :-\
Saludos!


[D4N93R]

No entiendo porque usas un control webbrowser, cuando perfectamente podrías usar HttpWebRequest/HttpWebResponse.

Pero vamos, no importa, veamos. probaste revisando la url de la variable turing a ver si ese es el contenido correcto?

Un saludo.

.:Weeds:.

Para hacerlo por HttpWebRequest/HttpWebResponse puedo hacerlo asi
Código (vb.net) [Seleccionar]
Dim req As Net.HttpWebRequest = DirectCast(Net.HttpWebRequest.Create("http://www.cmt.es/cmt_ptl_ext/Captcha.jpg"), Net.HttpWebRequest)
        Dim res As Net.HttpWebResponse = DirectCast(req.GetResponse, Net.HttpWebResponse)
        Dim img As Image = New System.Drawing.Bitmap(res.GetResponseStream)
        res.Close()
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
        PictureBox1.Image = img

Pero despues como inserto el valor de tb_numMov y de tbCaptcha?  :-\


.::IT::.

Código (csharp) [Seleccionar]

HttpWebRequest _HttpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.cmt.es/cmt_ptl_ext/Captcha.jpg");

HttpWebResponse _HttpWebResponse = (HttpWebResponse)_HttpWebRequest.GetResponse();

Stream _Stream = _HttpWebResponse.GetResponseStream();

this.pictureBox1.Image = Image.FromStream(_Stream);


Ahora cada ves que haces uan peticion ah http://www.cmt.es/cmt_ptl_ext/Captcha.jpg
pues te da un cookie por lo que necesitas uan variable de tipo CookieContainer donde guardarlo y usarlo para la peticion "POST".

seria algo como

Código (csharp) [Seleccionar]

_HttpWebRequest .CookieContainer = "aqui tu variable CookieContainer"


Suerte y aqui un ejemplo de como hacer lo que te digo
http://foro.elhacker.net/net/aporte_consumir_contenido_web_en_aplicaciones_net_cvb_netasp_net-t306634.0.html
Simplemente .::IT::.

.:Weeds:.

#4
Puff tu metodo supera mis conocimientos de largo, ademas esta en c#.net y no entiendo ni papa xD, mi idea en un principio era simple, sacar la imagen del webbrowser1 y hacer un get con la variable del numero del telefono y la variable del numero de captcha, de todas formas aun que consiga hacerlo, el resultado de la operadora de telefonos esta en un <b></b>, no tiene nada que lo identifique, creo que me tendre que dar por vencido, gracias a todos
saludos

EDITO: Si alguien quiere aportar con mucho gusto lo leere, me rindo por que lo veo imposible de realizar no por animos  >:D


.::IT::.

#5
Vamos hombre no te rindas no es tan dificil solo que no hay mucha info por hay pero en fin dime que numero puedo colocar para probar que es lo que devuelve esa pagina. porque soy de peru y con mi numeor no sale nada.

si fueran dos o tre numeros seria mejor para hacer pruebas.
Simplemente .::IT::.

.:Weeds:.

Cita de: .::IT::. en 12 Octubre 2010, 00:49 AM
Vamos hombre no te rindas no es tan dificil solo que no hay mucha info por hay pero en fin dime que numero puedo colocar para probar que es lo que devuelve esa pagina. porque soy de peru y con mi numeor no sale nada.

si fueran dos o tre numeros seria mejor para hacer pruebas.
todos los del 600000000 al 699999999, otra idea que tenia era desde el webbrowser cargar la imagen de la captcha desde la cache de este, pero info = 0, asi no hacia falta lo de las cookies por que lo hacia ya el webbrowser


cazique

Buenas noches gente, me gustaría hacerle dos consultas sobre este mismo tema para no abrir más mensajes:

1º Como se averigua, la ruta que emplea la página una vez le das al botón enviar ? Me explico, yo ahora mismo en algunas páginas lo que hago es utilizar un:

Código (vbnet) [Seleccionar]
www.Document.Forms(0).InvokeMember("submit")

pero veo que se puede averiguar la ruta como ponía arríba en el primer post de:

[url="http://www.cmt.es/cmt_ptl_ext/SelectOption.do?tb_numMov="NUMERO"]http://www.cmt.es/cmt_ptl_ext/SelectOption.do?tb_numMov="NUMERO[/url] SIN COMILLAS"&tbCaptcha="CAPTCHA SIN COMILLAS"&Submit=Buscar+&validar=si&tipo=buscar&nav=estado_num&pagina=&detalles=&nombre=&download=&idDetalle=&tipo=&categoria=

2º Esta página por ejemplo, suelen repetirse los Captcha cada X veces, pero como puedes hacer para capturar el texto cuando ese Captcha que envías es OK. Me explico, cuando el número es correcto y el captcha también, en una zona de la web aparece el siguiente texto:

Número:  6XXXXXXXX
Operador actual:  VODAFONE
Fecha: 25-nov-2011 20:53:34

Como podría capturar ese bloque para mostrarlo en mi programa ?

Un saludo y gracias de antemano.