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:
What are the tech differences between how Selenium "sends keys" and how a normal user would? Or how the Python library does?
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
答案 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)
另一种解决方案是首次发送错误的电子邮件,在错误消息之后,您可以应用正确的电子邮件,这是一个人为操作。