Ich versuche, Captchas schneller zu laden, rendere sie dann in einem WebBrowser-Steuerelement und kopiere dann das Bild und rende es in eine Picturebox.Fehlerhaftes Captcha Image von Google ReCaptcha Scrapping
Warum nicht einfach das Bild direkt in die PictureBox herunterladen, was den Vorteil hat, weniger CPU-Auslastung und Speicher zu verwenden. Diese Lösung funktioniert für jeden anderen Captcha-Dienst, der besser Solve Media heißt (mit Solve Media) Sehen Sie sich die Bild-URL an, wenn Sie das nächste Mal versuchen, es anzuzeigen, es gibt Ihnen ein falsches Fehler-catpcha Bild).
Aber jetzt brauche ich Unterstützung für ReCaptcha Captcha-System sowie für die Verwendung der Automatisierung meines Bot schneller, dann nur eine Webseite aktualisieren und warten auf es zu rendern.
Also ich schreibe einfach meinen Code hier so weit ich verstehe Ich vermisse gerade emulieren eine der Eigenschaften in HTML Request Ich habe den User-Agent als echten Internet Explorer 8 gefälscht, ich denke, das Problem ist das Cookie scheint irgendwie einen Cookie zu generieren, ich kann nicht herausfinden, wo, aber ich bekomme auch einen Cookie, den ich beim Herunterladen der Javascript-Datei finde.
In beiden Fällen versucht Google ReCaptcha, Sie mit einem falschen Captcha zu betrügen, das Sie nicht lesen können, um es in Ihrem Gesicht zu reiben, dass Sie nicht etwas richtig machen. Ich habe herausgefunden, wenn man die 2 schwarzen Kreise sieht, dann ist es offensichtlich, dass es falsch ist. Hier
ist ein Beispiel für Bad-Check Captcha und Gut Check Captcha
An einem Punkt Ich erinnere mich ReCaptcha ein weiteres Sicherheitsmerkmal hatte die irgendwie wußte, wenn Sie das Captcha Bild von der tatsächlichen Domain geladen, wo sie gesetzt werden Ich weiß nicht, wie das funktioniert, seit ich alles lokal heruntergeladen habe, oder? aber sie scheinen dieses Feature sowieso entfernt zu haben. (Eigentlich existiert es auf manchen Webseiten anscheinend standardmäßig deaktiviert, einfach auszutricksen benutzt Referer Header)
Ich versuche hier nichts zu schummeln werde ich noch manuell in diese Captchas eintippen aber das will ich auch Geben Sie sie schneller ein als erforderlich, um die Seite normal darzustellen.
Ich möchte, dass die Captchas entweder diese Straßennummern oder mindestens 2 Wörter ohne diese schwarzen Kreise werden.
Wie auch immer, hier ist mein aktueller Code.
Dim newCaptcha = New Captcha
Dim myUserAgent As String = ""
Dim myReferer As String = "http://www.google.com/recaptcha/demo/"
Dim outputSite As String = HTTP.HTTPGET("http://www.google.com/recaptcha/demo/", "", "", "", myUserAgent, myReferer)
Dim recaptchaChallengeKey = GetBetween(outputSite, "http://www.google.com/recaptcha/api/challenge?k=", """")
'Google ReCaptcha Captcha
outputSite = HTTP.HTTPGET("http://www.google.com/recaptcha/api/challenge?k=" & recaptchaChallengeKey, "", "", "", myUserAgent, myReferer)
'outputSite = outputSite.Replace("var RecaptchaState = {", "{""RecaptchaState"": {")
'outputSite = outputSite.Replace("};", "}}")
'Dim jsonDictionary As Dictionary(Of String, Object) = New JavaScriptSerializer().Deserialize(Of Dictionary(Of String, Object))(outputSite)
Dim recaptchaChallenge = GetBetween(outputSite, "challenge : '", "',")
outputSite = HTTP.HTTPGET("http://www.google.com/recaptcha/api/js/recaptcha.js", "", "", "", myUserAgent, myReferer) 'This page looks useless but it seems the javascript loads this anyways, maybe this why I get bad captchas?
If HTTP.LoadWebImageToPictureBox(newCaptcha.picCaptcha, "http://www.google.com/recaptcha/api/image?c=" & recaptchaChallenge, myUserAgent, myReferer) = False Then
MessageBox.Show("Recaptcha Image loading failed!")
Else
Dim newWork As New Work
newWork.CaptchaForm = newCaptcha
newWork.AccountId = 1234 'ID of Accounts.
newWork.CaptchaHash = "recaptcha_challenge_field=" & recaptchaChallenge
newWork.CaptchaType = "ReCaptcha"
Works.Add(newWork)
newCaptcha.Show()
End If
Hier ist die HTTP-Klasse, die ich verwende.
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports System.Net
Imports System.IO
Public Class HTTP
Public StoredCookies As New CookieContainer
Public Function HTTPGET(ByVal url As String, ByVal proxyname As String, ByVal proxylogin As String, ByVal proxypassword As String, ByVal userAgent As String, ByVal referer As String) As String
Dim resp As HttpWebResponse
Dim req As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
If userAgent = "" Then
userAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
End If
req.UserAgent = userAgent
req.Referer = referer
req.AllowAutoRedirect = True
req.ReadWriteTimeout = 5000
req.CookieContainer = StoredCookies
req.Headers.Set("Accept-Language", "en-us")
req.KeepAlive = True
req.Method = "GET"
Dim stream_in As StreamReader
If proxyname <> "" Then
Dim proxyIP As String = proxyname.Split(New Char() {":"})(0)
Dim proxyPORT As Integer = CInt(proxyname.Split(New Char() {":"})(1))
Dim proxy As New WebProxy(proxyIP, proxyPORT)
'if proxylogin is an empty string then don't use proxy credentials (open proxy)
If proxylogin <> "" Then
proxy.Credentials = New NetworkCredential(proxylogin, proxypassword)
End If
req.Proxy = proxy
End If
Dim response As String = ""
Try
resp = DirectCast(req.GetResponse(), HttpWebResponse)
StoredCookies.Add(resp.Cookies)
stream_in = New StreamReader(resp.GetResponseStream())
response = stream_in.ReadToEnd()
stream_in.Close()
Catch ex As Exception
End Try
Return response
End Function
Public Function LoadWebImageToPictureBox(ByVal pb As PictureBox, ByVal ImageURL As String, ByVal userAgent As String, ByVal referer As String) As Boolean
Dim bAns As Boolean
Try
Dim resp As WebResponse
Dim req As HttpWebRequest
Dim sURL As String = Trim(ImageURL)
If Not sURL.ToLower().StartsWith("http://") Then sURL = "http://" & sURL
req = DirectCast(WebRequest.Create(sURL), HttpWebRequest)
If userAgent = "" Then
userAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
End If
req.UserAgent = userAgent
req.Referer = referer
req.AllowAutoRedirect = True
req.ReadWriteTimeout = 5000
req.CookieContainer = StoredCookies
req.Headers.Set("Accept-Language", "en-us")
req.KeepAlive = True
req.Method = "GET"
resp = req.GetResponse()
If Not resp Is Nothing Then
Dim remoteStream As Stream = resp.GetResponseStream()
Dim objImage As New MemoryStream
Dim bytesProcessed As Integer = 0
Dim myBuffer As Byte()
ReDim myBuffer(1024)
Dim bytesRead As Integer
bytesRead = remoteStream.Read(myBuffer, 0, 1024)
Do While (bytesRead > 0)
objImage.Write(myBuffer, 0, bytesRead)
bytesProcessed += bytesRead
bytesRead = remoteStream.Read(myBuffer, 0, 1024)
Loop
pb.Image = Image.FromStream(objImage)
bAns = True
objImage.Close()
End If
Catch ex As Exception
bAns = False
End Try
Return bAns
End Function
End Class
EDIT: dachte ich, das Problem heraus, dass es bei
this Google Javascript Clientside Obfuscated Verschlüsselungssystem isthttp://www.google.com/js/th/1lOyLe_nzkTfeM2GpTkE65M1Lr8y0MC8hybXoEd-x1s.js
Ich mag noch in der Lage sein, es zu besiegen, ohne vielleicht einen schweren Web-Browser zu verwenden einig leichtes schnelles javascript auswerten steuerung? Es hat keinen Sinn, sie zu entschlüsseln und auf VB.NET zu portieren, denn sobald ich es tue, könnten sie ein paar Variablen oder die Verschlüsselung komplett ändern und ich habe all das für nichts getan, also möchte ich etwas, das intelligenter ist. An diesem Punkt weiß ich nicht einmal, wie die URL generiert wird, sie scheint für den Moment statisch zu sein und es ist wahrscheinlich eine echte Datei, nicht nur eine zeitlich generierte Datei.
Stellt die _challenge
Seite heraus, die die Herausforderung für das Bild gibt, ist nur eine Köderherausforderung .. diese Herausforderung wird dann ersetzt (verschlüsselt möglicherweise?) Clientseitig mit Variablen t1, t2, t3, scheint diese Verschlüsselung nicht benutzt wird jedes Mal, wenn du es passierst, sobald du Zugriff darauf bekommst, das zu tun, was ich versuche zu tun, funktioniert mein Code, aber es hört auf, in sehr zufälligen Intervallen zu arbeiten, ich will etwas festeres, das ich seit Wochen unbeaufsichtigt lassen kann.
'reloadParams' sind das' POST' oder 'GET'? – SSpoke
Gefunden es ist Python 'von tools.url importieren UrlMgr 'scheint es' GET' standardmäßig, es sei denn, Sie verwenden 'post = params' vielleicht? – SSpoke
Wow, es funktioniert perfekt, hoffentlich reparieren sie es nicht, Puh! – SSpoke