如何在 selenium C# 中获取 reCaptcha 图像
How to take reCaptcha image in selenium C#
当我尝试在 selenium 中获取 reCaptcha v2
图像时,我得到 no such this element
因为该元素不在主页中
那么我怎样才能在 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
下面的代码对我来说效果很好,给出了 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);
您假设只有一帧。但是有多个帧
您需要使用
_driver.SwitchTo().Frame(_driver.FindElement(By.Css("iframe[src*='recaptcha']")));
当我尝试在 selenium 中获取 reCaptcha v2
图像时,我得到 no such this element
因为该元素不在主页中
那么我怎样才能在 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
下面的代码对我来说效果很好,给出了 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);
您假设只有一帧。但是有多个帧
您需要使用
_driver.SwitchTo().Frame(_driver.FindElement(By.Css("iframe[src*='recaptcha']")));