如何使用Selenium和Java单击reCaptcha

时间:2019-03-20 15:15:10

标签: selenium selenium-webdriver iframe recaptcha webdriverwait

为什么尝试让驱动程序单击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();  

4 个答案:

答案 0 :(得分:2)

这对我有用。请注意,我正在使用Selenide。对于常规的硒代码,外观相同。

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

    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是应该起作用的代码。

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

答案 3 :(得分:0)

要在 reCaptcha 复选框上调用click(),因为该元素位于<iframe>中,您需要:

  • 为所需的 frameToBeAvailableAndSwitchToIt 诱导 WebDriverWait
  • 为所需的 elementToBeClickable 诱导 WebDriverWait
  • 您可以使用以下解决方案:

    • 代码块:

      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