[Selenium] Screenshot von Google ReCaptcha falsche position

06/26/2016 00:05 #Saiirex#1
Hey, ich versuche mit Selenium und dem FireFox driver ein Screenshot von dem Google Recaptcha v2 zu machen. Theoretisch klappt es, aber der Screenshot wird bei einer falschen Position gemacht. So, dass das Captcha nur zum kleinen Teil drauf ist. Woran liegt das?

Source:

Code:
private bool SolveCaptcha(FirefoxDriver webdriver)
        {
            var currentFrame = driver.CurrentWindowHandle;
            var iframe = driver.FindElementsByTagName("iframe");
            var el = iframe[0];
            driver.SwitchTo().Frame(el);
            driver.FindElementById("recaptcha-anchor").Click();
            Thread.Sleep(1000);
            driver.SwitchTo().DefaultContent();
            iframe = driver.FindElementsByTagName("iframe");
            el = iframe[2];
            driver.SwitchTo().Frame(el);
            Thread.Sleep(1000);
            var text = driver.FindElementByClassName("rc-imageselect-desc-wrapper").Text;

            if (File.Exists("captcha.png"))
            {
                File.Delete("captcha.png");
            }

            var arrScreen = webdriver.GetScreenshot().AsByteArray;
            using (var screen = new MemoryStream(arrScreen))
            {
                var bmpScreen = new Bitmap(screen);
                //var captchas = webdriver.FindElementsByClassName("captcha");
                //var element = captchas.FirstOrDefault(item => item.GetAttribute("class") == "captcha");


                var captcha = webdriver.FindElementById("rc-imageselect");

                var rectangle = new Rectangle(captcha.Location, captcha.Size);
                Image imgCap = bmpScreen.Clone(rectangle, bmpScreen.PixelFormat);
                imgCap.Save("captcha.png");
                using (var msCaptcha = new MemoryStream())
                {
                    imgCap.Save(msCaptcha, ImageFormat.Png);
                }
            }

            return false; // noch keine funktion
        }
Bei web.de habe ich so ein Screen von dem Captcha bekommen, hier funktioniert das komischerweise nicht so genau. Liegt es am iFrame?
06/26/2016 21:44 C_O_R_E#2
Ich habe überwiegend in Python 3 mit Selenium gearbeitet, doch die meisten Probleme liegen meist beim "graben" der HTML-Elemente.Kontrolliere ob du auch wirklich das iframe vom Capatcha grabst und kein anderes iFrame-Element, was zuvor im Document definiert ist.

Wie ich gerade sehe suchst du nach dem Element-Tag "iframe". Ich würde dir vorschlagen, bei komplexeren Webseiten FindElementByXpath zu nehmen.
06/27/2016 14:48 #Saiirex#3
Quote:
Originally Posted by C_O_R_E View Post
Ich habe überwiegend in Python 3 mit Selenium gearbeitet, doch die meisten Probleme liegen meist beim "graben" der HTML-Elemente.Kontrolliere ob du auch wirklich das iframe vom Capatcha grabst und kein anderes iFrame-Element, was zuvor im Document definiert ist.

Wie ich gerade sehe suchst du nach dem Element-Tag "iframe". Ich würde dir vorschlagen, bei komplexeren Webseiten FindElementByXpath zu nehmen.
XPath war in diesem Fall nicht möglich.

Der Grund warum es nicht funktioniert hat: Das Bild lag ja in einem iFrame und die Koordinaten haben sich logischerweise auf das iFrame bezogen. Ich habe aber versucht mit diesen Koordinaten ein Screenshot vom DefaultContent zu machen, was logischerweise nicht funktionieren konnte. Lösung: Ins Frame wechseln und dort ein Bild machen, oder ein Bild von dem iFrame machen und dort dann das richtige Ausschneiden.