Selenium: sendKeys()

时间:2015-07-28 23:05:07

标签: java python selenium

I tried using Java + Selenium to automatically login to my Gmail account however each time I am blocked by Google. When I log in manually (even on the very same server) I have no such issue. Further, if I use "sendKeys" type lib (https://pypi.python.org/pypi/SendKeys/0.3) I have no such problem.

My question is two fold:

  1. What are the tech differences between how Selenium "sends keys" and how a normal user would? Or how the Python library does?

  2. Is there a way to modify selenium so it mimics a real user? Or is there another library to use instead of Selenium that mimicks a real user?

Thanks

6 个答案:

答案 0 :(得分:1)

实际上它的速度差异。人类慢慢地打字,脚本写得非常快。因此,您必须降低脚本速度。所以总的来说你必须建立更好的机器人。 任何服务器都不会检测到更好的机器人。

答案 1 :(得分:0)

你应该在代码中加入一些延迟来欺骗谷歌你的代码是真正的人类 - 这就是它:) Thread.sleep可能是最简单的解决方案。

答案 2 :(得分:0)

打开gmail&登录&打开最新收到的邮件

DriverObj.get("http://www.gmail.com");
                DriverObj.findElement(By.id("gmail-sign-in")).click();
                DriverObj.findElement(By.id("Email")).sendKeys("youremailID");
                DriverObj.findElement(By.id("next")).click();
                DriverObj.findElement(By.id("Passwd")).sendKeys("yourpassword");
                DriverObj.findElement(By.id("signIn")).click();
                Thread.sleep(2000);
            WebElement tableelement=DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody"));
            java.util.List<WebElement> tableelement1=tableelement.findElements(By.xpath("//div[@class='Cp']/div/table//tbody/tr"));
            int tableelementsize=tableelement1.size();
            int i;
            if(tableelementsize>0){
                //DriverObj.navigate().refresh();
                for(i=0;i<tableelementsize;i++){
                    DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody/tr/td[6]")).click();
                }

            }else {
                 if(tableelementsize==0){
                    DriverObj.navigate().refresh();
                    for(i=0;i<tableelementsize;i++){
                        DriverObj.findElement(By.xpath("//div[@class='Cp']/div/table//tbody/tr/td[6]")).click();
                    }
                }
邮箱的路径可能会发生变化(您需要根据自己的工作进行更改)

答案 3 :(得分:0)

回答第1个问题: Sendkeys()方法是指用户对网页上特定文本框的输入,因为我们也可以使用javascriptExecuter进行相同的操作。

回答第二个问题: 据我所知,没有。但我不太确定。

在Java中,使用以下代码登录Gmail。

但是我可以说点击登录按钮后收件箱页面需要时间加载(最多10秒)

因此,如果您在没有任何等待(隐式或显式)的情况下搜索另一个元素,那么它将抛出错误。

driver.get( “http://www.gmail.com/”);

driver.findElement(By.id( “电子邮件”))的SendKeys( “userName的”);

driver.findElement(By.id( “下一个”))点击();

driver.findElement(By.id( “的passwd”))的SendKeys( “密码”);

driver.findElement(By.id( “登入”))上单击();

然后你可以使用Thread.sleep(10000),或者你已经编写了任何等待方法让驱动程序等待下一个对象可见,你可以使用那个。

答案 4 :(得分:0)

当然,Selenium只提供了编写自动化测试脚本的库。如果你想充当人类。然后,您应该在测试步骤之间将一些等待语句添加到整个脚本中。在您没有在脚本中添加任何等待之前,它将仅表现为机器人测试。如果您采用测试自动化工具的任何示例,工具不会向自动化测试添加任何额外的信息/操作。说明自动化测试是什么......它不是自动测试。它只是由机器完成的计算机辅助测试。我希望你现在可以通过上面的例子更加清楚。

答案 5 :(得分:-1)

另一种解决方案是首次发送错误的电子邮件,在错误消息之后,您可以应用正确的电子邮件,这是一个人为操作。