在实现selenium测试之前,我正在努力为我的selenium测试解决一个recaptcha问题。
我使用的用例:https://www.google.com/recaptcha/api2/demo
WebDriver driver = Selenium.getInstance();
Selenium.goToWebPage("https://www.google.com/recaptcha/api2/demo");
WebDriverWait wait = new WebDriverWait(driver, 5);
List<WebElement> allIFrames = SeleniumUtil.getWebElementNicelyByTagName(driver, wait, "iframe");
if(allIFrames == null){
return;
}
Optional<WebElement> captchaIFrame = allIFrames.stream().filter(webElement -> webElement.getAttribute("src").contains("recaptcha/api2/anchor")).findFirst();
if(!captchaIFrame.isPresent()){
return;
}
WebDriver frame = driver.switchTo().frame(captchaIFrame.get());
//System.out.println(frame.getPageSource());
WebElement recaptchaTokenElement = SeleniumUtil.getWebElementNicelyByXPath(frame, wait, "//*[@type='hidden']");
System.out.println(recaptchaTokenElement);
因此,对于system.outs,我试图找到找到captcha令牌的方法,但每次它都返回一个null元素。目前 selenium 的作用主要是:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(xpath)));
return driver.findElement(By.xpath(xpath));
对于by.cssselector等也一样。
我已经在正确的iframe中,因为页面源已正确打印出来,但按#recaptcha token(cssselector)、recaptcha token(id)、//*@id=“recaptcha token”搜索不起作用。
也许有人能帮我?
1条答案
按热度按时间woobm2wo1#
有一个iframe需要切换到驱动程序。
经过几次尝试,我得到了:
标准chromedriver设置:
获得代币:
我的输出,最后一行是标记: