如何在WebDriver中处理在线验证码

时间:2014-08-25 18:13:07

标签: selenium-webdriver

赞:1+ 7 =

网站有一个文本框,此文本框将接受两个数字之和的输入。我们如何捕获这两个数字,如1和7.任何数字都可以来到这个位置。

请帮帮我。

7 个答案:

答案 0 :(得分:1)

<html>
<body>
<input type ="text" id ="x">
<p> + </p>
<input type ="text" id ="y"> 

<script>
function adder(a,b){
  var x = Number(document.getElementById("x").value);
  var y = Number(document.getElementById("y").value);

  document.getElementById("demo").innerHTML =  x+y;
}
</script>
<button type = "button" onclick = "adder(x,y)"> calculate </button>
<p id = "demo"> </p>
</body>
</html>

答案 1 :(得分:0)

你真的不能这样做,因为如果“机器”可以解决它,CAPTCHA(完全自动公共图灵测试告诉计算机和人类除外)并没有做到这一点。

您可以做的是使用外部服务的API,例如http://www.deathbycaptcha.com。他们可以“为你”解决CAPTCHA,响应时间约为15秒。

实施例:

import com.DeathByCaptcha.AccessDeniedException;
import com.DeathByCaptcha.Captcha;
import com.DeathByCaptcha.Client;
import com.DeathByCaptcha.SocketClient;
import com.DeathByCaptcha.HttpClient;

/* Put your DeathByCaptcha account username and password here.
   Use HttpClient for HTTP API. */
Client client = (Client)new SocketClient(username, password);
try {
    double balance = client.getBalance();

    /* Put your CAPTCHA file name, or file object, or arbitrary input stream,
       or an array of bytes, and optional solving timeout (in seconds) here: */
    Captcha captcha = client.decode(captchaFileName, timeout);
    if (null != captcha) {
        /* The CAPTCHA was solved; captcha.id property holds its numeric ID,
           and captcha.text holds its text. */
        System.out.println("CAPTCHA " + captcha.id + " solved: " + captcha.text);

        if (/* check if the CAPTCHA was incorrectly solved */) {
            client.report(captcha);
        }
    }
} catch (AccessDeniedException e) {
    /* Access to DBC API denied, check your credentials and/or balance */
}

答案 2 :(得分:0)

我们无法自动化验证码,但可以处理这些问题。 场景: 1.输入用户名 2.手动在控制台中输入验证码 3.输入密码

  driver.findElement(By.id("username")).sendKeys("username");
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String captcha;   
            System.out.println("Please Enter the CAPTCHA Code:: ");
            captcha = br.readLine();
            System.out.println("Entered  CAPTCHA Code is:: "+captcha);
            driver.findElement(By.id("password")).sendKeys("password");

答案 3 :(得分:0)

自动化只有您可以获得开发团队的支持才能绕过验证码。这可以通过修复长令牌来实现,在开发环境中禁用验证码,为测试目的提供静态验证码。

如果没有任何问题,麻烦或时间问题,您无法自动执行常规验证码。 Captchas是为了防止自动化。

答案 4 :(得分:0)

我更喜欢手动解决方案,例如:

input_captcha = input("Entered CAPTCHA Code is: ")
browser.find_element_by_id("j_captcha").send_keys(input_captcha)

答案 5 :(得分:0)

CAPTCHA-完全自动化的公共Turing测试,可以区分计算机和人类。 如果将其自动化,则将杀死在网站上创建验证码的唯一目的。 要求您的开发人员在您的质量检查环境中将其禁用,然后继续进行测试或使用预定义的Cookie(硬编码的验证码)。

答案 6 :(得分:-1)

String capchavalue = driver.findElement(By.xpath("#")).getText().trim();
String removespace = capchavalue.replaceAll("\\s+", "");
String[] parts = removespace.split("\\+");
String part1 = parts[0];
String part2 = parts[1];
String[] parts1 = part2.split("\\=");
String part11 = parts1[0];
int summation = Integer.parseInt(part1) + Integer.parseInt(part11);
String final_value = String.valueOf(summation);
driver.findElement(By.xpath("#")).sendKeys(final_value);