4
votes

Comment cliquer sur le reCaptcha en utilisant Selenium et Java

Pourquoi est-ce que j'obtiens des erreurs en essayant de faire cliquer le pilote sur le bouton reCaptcha ?

voici le site sur lequel j'essaie de le faire fonctionner: https://rsps100.com/ vote / 760 /

Voici mon code actuel pour le moment:

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();  


0 commentaires

4 Réponses :


1
votes

Utilisez WebDriverWait pour identifier l'élément. Voir si cette aide.

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();


3 commentaires

est mon xpath droit? est mon truc cssSelector? j'ai essayé avec votre code et ma combinaison de code -> pastebin.com/g1pfzduq mais il a dit "n'a pas pu trouver element "et beaucoup d'erreurs rouges dans la console


avez-vous essayé vous-même? J'ai eu cette erreur --- La condition xpected a échoué: attente de la disponibilité du cadre: By.xpath: // iframe [starts-with (@ name, 'a-')] (essayé pendant 30 secondes avec 500 millisecondes intervalle) --- causé par: aucun élément de ce type


votre cadre est dynamique, j'ai donc écrit xpath comme ça.Copiez le code entier avec la commutation de cadre



0
votes

Voici le code qui devrait fonctionner.

driver.switchTo().frame("a-9wt0e8vkopnm");
driver.findElement(By.xpath("//span[@id='recaptcha-anchor']")).click();


2 commentaires

Exception dans le thread "principal" org.openqa.selenium.NoSuchFrameException: Aucun élément de cadre trouvé par nom ou par id a-9wt0e8vkopnm, c'est ce que j'ai obtenu lorsque j'ai essayé votre code. oui, je laisse le site Web se charger correctement jusqu'à ce que j'exécute ces commandes mais que j'obtienne toujours l'erreur


Je pense que c'est le bon nom, mais pouvez-vous essayer avec une pièce d'identité.



4
votes

Pour appeler cliquez () sur la reCaptcha case à cocher car l'élément est dans un vous besoin de:

  • Indiquez WebDriverWait pour le frameToBeAvailableAndSwitchToIt souhaité.
  • Indiquez WebDriverWait pour le elementToBeClickable souhaité.
  • Vous pouvez utiliser la solution suivante:

    • Bloc de code:

      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();
          }
      }
      
  • Instantané du navigateur:

     reCaptcha


5 commentaires

: Vous volez toujours nos efforts :). J'ai exécuté le code 10 fois et cela fonctionne bien mais OP complaing.


@KajalKundu J'adorerais vous voir réussir mais oui en suivant les meilleures pratiques afin que les nouveaux contributeurs soient guidés de la meilleure manière possible :) vos contributions sont toujours très utiles.


SO est vraiment déroutant lorsque vous fournissez du code entier, d'autres contributeurs se plaignent toujours de cela.Lorsque vous donnez une réponse spécifique, OP confond également :)


@alqqu Upvote la réponse si cette / une réponse vous est / a été utile pour le bénéfice des futurs lecteurs.


pour mon cas, j'ai dû cliquer sur l'élément 'div.rc-anchor-content'



2
votes

Cela a fonctionné pour moi. Veuillez noter que j'utilise Selenide. Pour le code de sélénium normal, la même apparence.

    import static com.codeborne.selenide.Selenide.*;

    void recaptchaTest() {

        open("https://rsps100.com/vote/760");

        switchTo().frame($x("//iframe[starts-with(@name, 'a-') and starts-with(@src, 'https://www.google.com/recaptcha')]"));

        $("div.rc-anchor-content").click();

        switchTo().defaultContent();

    }


0 commentaires