Как нажать на reCaptcha, используя Selenium и Java - PullRequest
2 голосов
/ 20 марта 2019

Почему я получаю ошибки при попытке заставить драйвер нажимать кнопку reCaptcha?

это сайт, на котором я пытаюсь заставить его работать: https://rsps100.com/vote/760/

Это мой текущий код:

WebElement iframeSwitch = driver.findElement(By.xpath("/html/body/div[1]/div/div[1]/div/div/div[2]/div/form/div/div/div/div/iframe"));
driver.switchTo().frame(iframeSwitch);   
driver.findElement(By.cssSelector("div[class=recaptcha-checkbox-checkmark]")).click();  

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Чтобы вызвать click() на reCaptcha флажок , так как элемент находится в пределах <iframe>, вам необходимо:

  • Индуцировать WebDriverWait для нужного frameToBeAvailableAndSwitchToIt .
  • Induce WebDriverWait для нужного elementToBeClickable .
  • Вы можете использовать следующее решение:

    • Кодовый блок:

      public class ReCaptcha_click {
      
          public static void main(String[] args) {
      
              System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
              ChromeOptions options = new ChromeOptions();
              options.addArguments("start-maximized");
              options.addArguments("disable-infobars");
              options.addArguments("--disable-extensions");
              WebDriver driver = new ChromeDriver(options);
              driver.get("https://rsps100.com/vote/760");
              new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@name, 'a-') and starts-with(@src, 'https://www.google.com/recaptcha')]")));
              new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.recaptcha-checkbox-checkmark"))).click();
          }
      }
      
  • Снимок браузера:

    reCaptcha

0 голосов
/ 20 марта 2019

Вот код, который должен работать.

driver.switchTo().frame("a-9wt0e8vkopnm");
driver.findElement(By.xpath("//span[@id='recaptcha-anchor']")).click();
0 голосов
/ 20 марта 2019

Используйте WebDriverWait для идентификации элемента. См., Если это поможет.

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[starts-with(@name,'a-')]")));
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.recaptcha-checkbox-checkmark")));
element.click();
...