Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > .NET Languages
You last visited: Today at 00:53

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



C# Captcha lösen Problem

Discussion on C# Captcha lösen Problem within the .NET Languages forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
C# Captcha lösen Problem

Hallo, ich möchte das Captcha von web.de runterladen und zu DBC hochladen.

Am Anfang hat es wunderbar geklappt, aber jetzt lädt er das bild "nicht richtig" runter.

Mein Code:

Code:
System.Net.WebClient wc = new System.Net.WebClient();
HtmlElementCollection imgs = this.webBrowser1.Document.GetElementsByTagName("img");

for (int j = 0; j < imgs.Count; j++)
{
     string classCaptcha = imgs[j].GetAttribute("className"); 
     if (classCaptcha == "captcha")
     {

          //captcha.png löschen falls vorhanden
          if (File.Exists("captcha.png"))
          File.Delete("captcha.png");

          //captcha runterladen
          string img;
          img = imgs[j].GetAttribute("src");
          wc.DownloadFile(img, "captcha.png");
     }
}
Ich habe schon versucht zu debuggen und in "img" steht eigentlich auch der richtige link drin.

Im Link ist iwas mit "anticache" könnte es evtl daran liegen?
€: Ich habe gerade das Captcha aus dem Webbrowserelement und das Captcha aus dem Link in "img" verglichen und es sind zwei verschiedene?
#Saiirex is offline  
Old 06/17/2015, 19:53   #2


 
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
Du erhälst vermutlich 2 verschiedene Captchas weil du die Cookies für den Download nicht wiederverwendest. Daher generiert er dir auch gleich'n neuen Captcha.

Übrigens überschreibst du das Bild immer wieder lokal. Solltest du also mehrere Captchas haben, wird logischerweise nur das letzte gespeichert weil alle vorherigen überschrieben werden.
Mostey is offline  
Thanks
1 User
Old 06/17/2015, 20:06   #3
 
elite*gold: 0
Join Date: Apr 2008
Posts: 495
Received Thanks: 817
Quote:
Originally Posted by #Saiirex View Post
€: Ich habe gerade das Captcha aus dem Webbrowserelement und das Captcha aus dem Link in "img" verglichen und es sind zwei verschiedene?
Servus,

dass wird wahrscheinlich daran liegen, dass Du die Url zweimal aufrufst und deshalb ein anderes Captcha erstellt wird.

Zu deinem Code, verzichte auf das WebBrowser-Control. Falls Du es dennoch verwenden willst, dann könntest Du an dieser Stelle
Code:
HtmlElementCollection imgs = this.webBrowser1.Document.GetElementsByTagName("img");
Lambda-Ausdrücke verwenden, somit wird Deine For-Schleife und if-Bedingung überflüssig und der Code übersichtlicher.

Ich habe Dir eben eine schnelle Lösung geschrieben, ohne Fehlerbehandlung usw.

Code:
using HtmlAgilityPack;
using System;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace WebCaptcha
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                const string baseUrl = @"https://registrierung.web.de/";
                //LoadHTML
                string htmlSource = await GetHTML(new Uri(baseUrl));
                //ParseHTML
                string parsedHtml = ParseHtml(htmlSource);
                //DownloadCaptcha
                await GetImageFromURL(new Uri(parsedHtml.Replace(@"./", baseUrl)));
            }).Wait();

            Console.WriteLine("Fertig");
            Console.ReadKey();
        }

        /// <summary>
        /// Laedt den Quellcode von registrierung.web.de herunter, um die Captcha Adresse zu erhalten.
        /// </summary>
        /// <param name="Address">Uri => Adresse von web.de</param>
        /// <returns>
        /// string.Empty => Konnte kein Quellcode heruntergeladen werden.
        /// string => Gefuellt mit Quellcode
        /// </returns>
        private async static Task<string> GetHTML(Uri Address)
        {
            string ret = string.Empty;

            using (WebClient webClient = new WebClient())
            {
                ret = await webClient.DownloadStringTaskAsync(Address);
            }

            return ret;
        }

        /// <summary>
        /// Parst den HTML Quellcode mit Hilfe von HtmlAgilityPack, um die Adresse des Captchas zu kriegen.
        /// </summary>
        /// <param name="Html">string => Quellcode von web.de</param>
        /// <returns>
        /// string.Empty => Konnte den Quellcode nicht parsen.
        /// string => Gefuellt mit der Adresse des Captchas
        /// </returns>
        private static string ParseHtml(string Html)
        {
            string imgSource = string.Empty;

            HtmlDocument htmlDoc = new HtmlDocument();
            //HTML Quellcode laden
            htmlDoc.LoadHtml(Html);
            if (htmlDoc.DocumentNode != null)
            {
                //Suche das <img>-Tag mit der ID = 'id96' und lese den 'src' Wert aus.
                imgSource = htmlDoc.DocumentNode.SelectNodes(@"//img[@id='id96']").Select(a => a.Attributes["src"]).FirstOrDefault().Value;
            }

            return imgSource;
        }


        /// <summary>
        /// Laedt das Captcha und speichert es in den aktuellen Ordner des Programmes unter den Namen "captcha.png".
        /// </summary>
        /// <param name="Url"> Uri => Adresse des Captchas</param>
        /// <see cref="http://dotnet-snippets.de/snippet/image-aus-url-laden/509"/>
        private async static Task GetImageFromURL(Uri Url)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
            HttpWebResponse httpWebReponse = (HttpWebResponse)(await httpWebRequest.GetResponseAsync());
            System.IO.Stream stream = httpWebReponse.GetResponseStream();
            Image.FromStream(stream).Save("captcha.png");
        }
    }
}
schnewin is offline  
Thanks
1 User
Old 06/18/2015, 00:35   #4
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Quote:
Originally Posted by schnewin View Post
Servus,

dass wird wahrscheinlich daran liegen, dass Du die Url zweimal aufrufst und deshalb ein anderes Captcha erstellt wird.

Zu deinem Code, verzichte auf das WebBrowser-Control. Falls Du es dennoch verwenden willst, dann könntest Du an dieser Stelle
Code:
HtmlElementCollection imgs = this.webBrowser1.Document.GetElementsByTagName("img");
Lambda-Ausdrücke verwenden, somit wird Deine For-Schleife und if-Bedingung überflüssig und der Code übersichtlicher.

Ich habe Dir eben eine schnelle Lösung geschrieben, ohne Fehlerbehandlung usw.

Code:
using HtmlAgilityPack;
using System;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace WebCaptcha
{
    class Program
    {
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                const string baseUrl = @"https://registrierung.web.de/";
                //LoadHTML
                string htmlSource = await GetHTML(new Uri(baseUrl));
                //ParseHTML
                string parsedHtml = ParseHtml(htmlSource);
                //DownloadCaptcha
                await GetImageFromURL(new Uri(parsedHtml.Replace(@"./", baseUrl)));
            }).Wait();

            Console.WriteLine("Fertig");
            Console.ReadKey();
        }

        /// <summary>
        /// Laedt den Quellcode von registrierung.web.de herunter, um die Captcha Adresse zu erhalten.
        /// </summary>
        /// <param name="Address">Uri => Adresse von web.de</param>
        /// <returns>
        /// string.Empty => Konnte kein Quellcode heruntergeladen werden.
        /// string => Gefuellt mit Quellcode
        /// </returns>
        private async static Task<string> GetHTML(Uri Address)
        {
            string ret = string.Empty;

            using (WebClient webClient = new WebClient())
            {
                ret = await webClient.DownloadStringTaskAsync(Address);
            }

            return ret;
        }

        /// <summary>
        /// Parst den HTML Quellcode mit Hilfe von HtmlAgilityPack, um die Adresse des Captchas zu kriegen.
        /// </summary>
        /// <param name="Html">string => Quellcode von web.de</param>
        /// <returns>
        /// string.Empty => Konnte den Quellcode nicht parsen.
        /// string => Gefuellt mit der Adresse des Captchas
        /// </returns>
        private static string ParseHtml(string Html)
        {
            string imgSource = string.Empty;

            HtmlDocument htmlDoc = new HtmlDocument();
            //HTML Quellcode laden
            htmlDoc.LoadHtml(Html);
            if (htmlDoc.DocumentNode != null)
            {
                //Suche das <img>-Tag mit der ID = 'id96' und lese den 'src' Wert aus.
                imgSource = htmlDoc.DocumentNode.SelectNodes(@"//img[@id='id96']").Select(a => a.Attributes["src"]).FirstOrDefault().Value;
            }

            return imgSource;
        }


        /// <summary>
        /// Laedt das Captcha und speichert es in den aktuellen Ordner des Programmes unter den Namen "captcha.png".
        /// </summary>
        /// <param name="Url"> Uri => Adresse des Captchas</param>
        /// <see cref="http://dotnet-snippets.de/snippet/image-aus-url-laden/509"/>
        private async static Task GetImageFromURL(Uri Url)
        {
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(Url);
            HttpWebResponse httpWebReponse = (HttpWebResponse)(await httpWebRequest.GetResponseAsync());
            System.IO.Stream stream = httpWebReponse.GetResponseStream();
            Image.FromStream(stream).Save("captcha.png");
        }
    }
}
Web.de generiert die ids immer random, deswegen ist das mit 'id96' leider nicht möglich. Deswegen habe ich ja auch den umständlichen Code geschrieben wie ich an die Id ran komme.
#Saiirex is offline  
Old 06/18/2015, 17:05   #5
 
Kraizy​'s Avatar
 
elite*gold: 0
The Black Market: 471/0/0
Join Date: Apr 2010
Posts: 9,696
Received Thanks: 1,811
Quote:
Originally Posted by #Saiirex View Post
Web.de generiert die ids immer random, deswegen ist das mit 'id96' leider nicht möglich. Deswegen habe ich ja auch den umständlichen Code geschrieben wie ich an die Id ran komme.
Quote:
Originally Posted by schnewin View Post
PHP Code:
imgSource htmlDoc.DocumentNode.SelectNodes(@"//img[@id='id96']").Select(=> a.Attributes["src"]).FirstOrDefault().Value
->
PHP Code:
imgSource htmlDoc.DocumentNode.SelectNodes(@"//img[@class='captcha']").Select(=> a.Attributes["src"]).FirstOrDefault().Value
Kraizy​ is offline  
Old 06/18/2015, 17:13   #6
 
elite*gold: 300
Join Date: Apr 2013
Posts: 3,234
Received Thanks: 1,205
Ich weiß nicht warum, aber mein Code funktioniert ohne Probleme. Er liest das richtige Captcha aus, lädt es runter und das alles ohne Probleme
#Saiirex is offline  
Old 06/18/2015, 18:11   #7
 
elite*gold: 0
Join Date: Apr 2008
Posts: 495
Received Thanks: 817
Quote:
Originally Posted by #Saiirex View Post
Web.de generiert die ids immer random, deswegen ist das mit 'id96' leider nicht möglich. Deswegen habe ich ja auch den umständlichen Code geschrieben wie ich an die Id ran komme.
Bei mir hat das img-Tag vom Captcha immer noch die selbe ID. Selbst mit einem anderen Rechner ist es die selbe.
Wann ändert sich die ID?
schnewin is offline  
Reply


Similar Threads Similar Threads
Captcha lösen :D
08/22/2009 - Metin2 Private Server - 4 Replies
wie scho gesagt wollte fragen ob das jemand lösen kann :P http://www.abload.de/thumb/authcode.phpha3z.png gibt auch ein dickes thx :D:D
Captcha Lösen
08/16/2009 - Metin2 Private Server - 2 Replies
Plx kann mir mal einer das Captcha hier lösen? Kanns net lesen und somit auch net entziffern >.< Thanx natürlich dabei xD http://img512.imageshack.us/img512/3554/authcodep hpm.png
captcha lösen
08/10/2009 - Metin2 Private Server - 2 Replies
Hallo, könnte vielleicht jemand dieses captcha lösen thx:) http://img248.imageshack.us/img248/4706/72615658. png mfg



All times are GMT +1. The time now is 00:54.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.