当我尝试在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, "");
}
}
答案 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);
你假设只有一帧。但是有多个框架
您需要使用
_driver.SwitchTo().Frame(_driver.FindElement(By.Css("iframe[src*='recaptcha']")));