如何在selenium C#中拍摄reCaptcha图像

时间:2017-09-16 22:53:17

标签: c# selenium recaptcha captcha

当我尝试在selenium中获取reCaptcha v2图像时,我得不到这样的元素! Becoz不在主页面中的元素

  

所以如何才能在selenium C#中获得图片!

  _driver.Navigate().GoToUrl("https://www.google.com/recaptcha/api2/demo");

            _driver.SwitchTo().Frame(0);

            _driver.FindElement(By.Id("recaptcha-anchor")).Click();



            Thread.Sleep(5000);

            _driver.SwitchTo().Frame(0);

            //To get all images in page
            IList<IWebElement> images = _driver.FindElements(By.TagName("img"));

            MessageBox.Show(images.Count.ToString());

            string reCaptchaXpath = "";

            foreach (var img in images)
            {
                if (img.GetAttribute("src").Contains("https://www.google.com/recaptcha/api2/"))
                {
                    reCaptchaXpath = GenerateXpath(img, "");
                }
            }

1 个答案:

答案 0 :(得分:0)

修改-1

下面的代码对我来说很好,并提供了16张图片

        ChromeDriver _driver;
        _driver = new ChromeDriver();
        _driver.Url = "https://www.google.com/recaptcha/api2/demo";
        Thread.Sleep(5000);

        _driver.SwitchTo().Frame(_driver.FindElement(By.CssSelector("iframe[src*='recaptcha']")));

        _driver.FindElement(By.ClassName("recaptcha-checkbox-checkmark")).Click();

        Thread.Sleep(2000);
        //_driver.SwitchTo().Frame(_driver.FindElement(By.CssSelector("iframe[src*='recaptcha']")));

        _driver.SwitchTo().DefaultContent();
        _driver.SwitchTo().Frame(_driver.FindElements(By.TagName("iframe"))[1]);
        images = _driver.FindElements(By.CssSelector("img"));

        Console.WriteLine(images.Count.ToString());

原始答案

您的问题是以下声明

_driver.SwitchTo().Frame(0);

你假设只有一帧。但是有多个框架

IFrames

您需要使用

_driver.SwitchTo().Frame(_driver.FindElement(By.Css("iframe[src*='recaptcha']")));