Jak zrobić Captchę na formularzu?

0

Jeżeli w WebBrowser1 występuje CAPTCHA to wyświetl Captche na Formie

Jak takie coś zrobić? Przy czym nie chce by cały WebBrowser1 mi się wyświetlał, a wyłącznie CAPTCHA...która musi nie tylko wizualnie się wyświetlać, ale też być "prawdziwą Captchą", tzn że po kliknięciu na nią - dzieją się dalsze instrukcje..

1.png

myslalem o tym by stworzyć webbrowser2, który by miał wymiary width="300" height="57" (takie jak captcha) i w przypadku wystąpienia captchy - Captcha by się kopiowała do webbrowser2, a następnie działania -kliknięcie / wpisanie znaków z webbrowser2 by się duplikowały do webbrowser1...dobrze myślę ?

0

Łap przykład do pobrania obrazka użyłem WebClient

Option Explicit On

Imports System.IO
Imports System.Text.RegularExpressions

Public Class Form1

    Dim recaptcha_challenge As String

    Private Sub btnNavigate_Click(sender As Object, e As EventArgs) Handles btnNavigate.Click
        WebBrowser1.Navigate("http://www.google.com/recaptcha/demo/") 'test capcha
    End Sub

    Private Sub btnSendCaptcha_Click(sender As Object, e As EventArgs) Handles btnSendCaptcha.Click
        Dim PostData As String = "recaptcha_challenge_field=" & recaptcha_challenge & _
           "&recaptcha_response_field=" & tbCaptcha.Text & "&Button1=Submit"
        Dim Headers As String = "Content-Type: application/x-www-form-urlencoded" & vbCrLf
        Dim bPostData() As Byte = System.Text.Encoding.ASCII.GetBytes(PostData)
        WebBrowser1.Navigate("http://www.google.com/recaptcha/demo/", Nothing, bPostData, Headers) 'wyslanie POST
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim pageSrc As String = WebBrowser1.Document.Body.InnerHtml 'pobieramy zrodlo strony

        Dim m As Match = Regex.Match(pageSrc, "<INPUT id=recaptcha_challenge_field type=hidden value=([^ ]+)") 'pobieramy challenge (jest potrzebne do wyslania POST)
        If m.Success Then
            recaptcha_challenge = m.Groups.Item(1).Value
        Else
            MsgBox("Bład pobierania challenge!")
            Exit Sub
        End If

        Dim imageURL As String
        m = Regex.Match(pageSrc, "<IMG id=recaptcha_challenge_image alt=""Zadanie obrazkowe reCAPTCHA"" src=""([^""]+)""") 'pobieramy adres obrazka
        If m.Success Then
            imageURL = m.Groups.Item(1).Value
        Else
            MsgBox("Bład pobierania adresu obrazka!")
            Exit Sub
        End If

        Dim webClient As New System.Net.WebClient
        Dim imgStream As New MemoryStream(webClient.DownloadData(imageURL)) 'pobieramy obrazek

        PictureBox1.Image = Image.FromStream(imgStream) 'i wyswietlamy go w PictureBox
    End Sub

End Class
0

ale to nadal jest z wykorzystaniem picturebox :(
a mi zależy na tym by to nie było picturebox tylko prawdziwa CAPTCHA wyświetlała się ....gdyż czasem się wyświetla Captcha typu "kliknij na gwiazdkę" lub "kliknij na nożyczki" itp itd...
a jeżeli będzie to w picturebox to taka captcha się nie sprawdzi...

a czy da się zrobić coś takiego, że cały webBrowser1 jest Invisible, ale w momencie pojawienia się Captchy, element Capchy staję się Visible?
coś na zasadzie:

  WebBrowser1.Document.GetElementById("recaptcha_challenge_image").SetAttribute( Visible = True)

Tak by tylko Captcha się stawała Visible, a pozostały WebBrowser nadal był niewidoczny.. ?

1

Nie wiem co to za captcha (na jakiej stronie ją znaleźć) ale to zapewne to jakaś oparta na JS i rzeczywiście zwykły PictureBox się nie sprawdzi. W przykładzie podaję jak można pokazać captcha ze strony http://sweetcaptcha.com/ (oparta czasem na klikaniu czasem na przeciąganiu obrazków)

    Private Sub btnNavigate_Click(sender As Object, e As EventArgs) Handles btnNavigate.Click
        WebBrowser1.Visible = False
        WebBrowser1.Navigate("http://sweetcaptcha.com/")
    End Sub

    Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim pageSrc As String = WebBrowser1.Document.Body.InnerHtml 'pobieramy zrodlo strony
        'id diva z capcha jest zmienne dlatego najwygodniej je pobrac za pomoca wyrazen regularnych
        Dim m As Match = Regex.Match(pageSrc, "<DIV ondragover=""return false"" id=([^ ]+) class=""sweetcaptcha rendered ltr""") 'div captcha
        If m.Success Then
            Dim captchaDivID As String = m.Groups.Item(1).Value
            Dim Elem As HtmlElement
            Elem = WebBrowser1.Document.GetElementById(captchaDivID) 'pobierz div z captcha 
            If Elem = Nothing Then 'nie znaleziono captcha
                Exit Sub
            End If
            Elem.ScrollIntoView(True) 'przewin do captcha
            'rozmiary captcha
            Dim x As Integer = Elem.OffsetRectangle.Right - Elem.OffsetRectangle.Left
            Dim y As Integer = Elem.OffsetRectangle.Bottom - Elem.OffsetRectangle.Top
            WebBrowser1.ScrollBarsEnabled = False 'ukryj paski przewijania
            'wielkosc webbrowser taka jak diva captcha
            WebBrowser1.Width = x
            WebBrowser1.Height = y
            'i wreszczie mozna pokazac webbrowser
            WebBrowser1.Visible = True
        End If
    End Sub

PS: Jaki to w ogóle miał być język bo wydaje mi się że wcześniej w temacie było VB - ... i dlatego piszę w Visual Basic

0

moja Captcha ma takie właściwości:

<div id="captcha_container" style="margin: 0;padding: 0;width: 400px;height: 130px;background-i…mage: url('');"

jak mam zmienić ten fragment kodu?
bo wpisałem coś takiego i coś nie hula ;/

        Dim m As Match = Regex.Match(pageSrc, "captcha_container") 'div captcha

... dzięki za chęci pomocy :)

Captcha występuje na darkwarez.pl/forum
user image

@edit

takie rozwiązanie będzie dobre?

        Dim theElementCollection As HtmlElementCollection = WebBrowser1.Document.GetElementsByTagName("div")
        For Each Elem As HtmlElement In theElementCollection
            Dim controlName As String = Elem.GetAttribute("id").ToString
            If controlName = "captcha_container" Then
                Elem.Focus()
        Elem.ScrollIntoView(True) 'przewin do captcha
        'rozmiary captcha
        Dim x As Integer = Elem.OffsetRectangle.Right - Elem.OffsetRectangle.Left
        Dim y As Integer = Elem.OffsetRectangle.Bottom - Elem.OffsetRectangle.Top
        WebBrowser1.ScrollBarsEnabled = False 'ukryj paski przewijania
        'wielkosc webbrowser taka jak diva captcha
        WebBrowser1.Width = x
        WebBrowser1.Height = y
        'i wreszczie mozna pokazac webbrowser
        WebBrowser1.Visible = True
            End If
        Next

(niby ten kod działa, nie wiem czemu ale cały webbrowser i aplikacja zawiesza się na około 10 sekund podczas wykonywania tego kodu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0