2017-05-10 52 views
0

Selenium网络驱动程序如何防止网站登录?Selenium无法使用网络驱动程序登录

同时您可以手动输入登录表单,并且硒代码的所有其他部分都能正常工作,这是如何实现的?

是否有可能通过Selenium网络驱动程序登录到此类网站?

<!-- login form --> 
<form action="login.php?do=login" method="post" onsubmit="md5hash(vb_login_password, vb_login_md5password, vb_login_md5password_utf, 0)"> 
<script type="text/javascript" src="clientscript/vbulletin_md5.js?v=387"></script> 
<table cellpadding="0" cellspacing="3" border="0"> 
<tr> 
<td class="smallfont" style="white-space: nowrap;"><label for="navbar_username">Имя</label></td> 
<td><input type="text" class="bginput" style="font-size: 11px" name="vb_login_username" id="navbar_username" size="10" accesskey="u" tabindex="101" value="Имя" onfocus="if (this.value == 'Имя') this.value = '';" /></td> 
<td class="smallfont" nowrap="nowrap"><label for="cb_cookieuser_navbar"><input type="checkbox" name="cookieuser" value="1" tabindex="103" id="cb_cookieuser_navbar" accesskey="c" />Запомнить?</label></td> 
</tr> 
<tr> 
<td class="smallfont"><label for="navbar_password">Пароль</label></td> 
<td><input type="password" class="bginput" style="font-size: 11px" name="vb_login_password" id="navbar_password" size="10" tabindex="102" /></td> 
<td><input type="submit" class="button" value="Вход" tabindex="104" title="Введите ваше имя пользователя и пароль, чтобы войти, или нажмите кнопку 'Регистрация', чтобы зарегистрироваться." accesskey="s" /></td> 
</tr> 
</table> 
<input type="hidden" name="s" value="" /> 
<input type="hidden" name="securitytoken" value="1494435076-6acf057fb2e17e28bd5679c57501a85f896b4310" /> 
<input type="hidden" name="do" value="login" /> 
<input type="hidden" name="vb_login_md5password" /> 
<input type="hidden" name="vb_login_md5password_utf" /> 
</form> 
<!--/login form --> 
+0

由于您不在正确的页面上,或者您没有为您的输入和提交选择正确的元素,所以可能实际上无法登录。请举例说明一些代码。 – ElementCR

+0

我无法理解这个问题? Selenium无法保护网站免受登录。 – demouser123

+0

@ElementCR你可以说这个登录表单吗? – thinker

回答

1

您可以通过两种方式与硒登录:

  1. 通过登录页面上填写表格。这涉及到查找用户名和密码元素并为您在测试数据库中创建的测试用户输入信息。

  2. 以编程方式登录到系统的后端,而不是使用UI。这仍然需要用户名和密码,应该只在测试环境中工作,并且语法取决于您使用的是哪种身份验证模块。

0

在寻找一些例子后,我发现这个参考。 How to valid a login page using Java and Selenium WebDriver?

一定要切换findElement(By。(Identifier))。

不确定这是否会提供即时结果,但这是我开始的地方。

祝你好运。

@Before 
public void setup() throws MalformedURLException, UnknownHostException{ 
driver = new HtmlUnitDriver(true); 
driver.get(System.getProperty("login.url")); 
} 

@Test 
public void login(){ 
driver.findElement(By.name("vb_login_username")).sendKeys("login"); 
driver.findElement(By.name("vb_login_password")).sendKeys("password");  
driver.findElement(By.type("submit")).click(); 
} 
+0

我现在不能,但是今天晚些时候我可以试试看。你有我可以使用的有效测试用例吗?如果你给我发私人讯息,我可以看到什么是可能的。 – ElementCR

1

如何从被硒网络驱动器登录保护的站点?

我还没有看到任何网站可以区分访问该网页的人类和Selenium网络驱动程序。可能有一些,我不确定。见this

但是,很难为每个重新加载的html标签更改id, classname, name的网站自动执行任务。 Google plus就是这样一个例子,有很多。对于Bet365等网站,由于存在实时重新加载,因此很难自动执行任务。

区分机器人和人类CAPTCHA被网站使用。


同时可以进入日志形式manualy和硒代码的所有其他部分将正常工作,如何实现这achived?

是的,可以实现。您可以让程序等待一段时间并输入您的信息(例如:用户名,密码)。然后,您可以执行操作,如点击或选择使用您的脚本。 但是您的浏览器应该使用Webdriver打开。

为了让您的程序等待,您可以使用Thread.sleep(int),但是您可以使用WebDriverWait以获得更好的结果。

在这里艰难的工作将决定等待时间,因为每个人都不会有相同的速度输入值。


如所建议的通过ElementCRsendkeys("value")比手动输入更好。

相关问题