我正在尝试使用机械化登录我认为编码不佳的网站,我正面临一些问题。
网站表格如下:
<tr>
<td align="left" valign="middle" class="style3">User name </td>
<td height="22" colspan="2" align="right" valign="middle"><input name="someLongCrap_UserName" type="text" id="someLongCrap2_UserName" class="inputborder" onkeydown="javascript:if (event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('imgSubmit').focus().click();}};" /></td>
</tr>
<tr>
<td align="left" valign="middle" class="style3">Password</td>
<td height="22" colspan="2" align="right" valign="middle"><input name="someLongCrap_Password" type="password" id="someLongCrap2_Password" class="inputborder" onkeydown="javascript:if (event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('imgSubmit').focus().click();}};" /></td>
</tr>
<tr>
<td rowspan="2" align="left" valign="middle"> </td>
<td rowspan="2" align="right" valign="bottom">
<a id="abcDef">
<input type="image" name="imgSubmit1" id="imgSubmit2" alt="Submit" /></a>
</td>
</tr>
我尝试过以下不同的迭代:
from mechanize import Browser
br = Browser()
br.open("http://www.mysite.com")
user = br.select_form("someLongCrap_UserName") ;
user.set_value='myUserName';
passw = br.select_form("someLongCrap_Password")
passw.set_value='myPassword';
我收到以下类型的错误:
mechanize._mechanize.FormNotFoundError: no form matching name 'someLongCrap_UserName'
我希望更熟悉机械化的人可以告诉我我做错了什么。
此外,我最终还希望登录,所以我想“点击”(通过机械化)登录“提交”按钮(name =“imgSubmit1”)。
感谢您提出任何指示
运行
for form in br.forms():
print form
print '-------------'
我在表格列表中得到这些:
<TextControl(someLongCrap_UserName=)>
<PasswordControl(someLongCrap_Password=)>
但是当我转到.select_form(nr=x)
时,对于x&gt; 0我收到错误。
br.select_form(nr=0)
如果x = 1;
mechanize._mechanize.FormNotFoundError: no form matching nr 1
答案 0 :(得分:0)
使用索引选择所需的表单
像这样。第一次for form in br.forms():
print form
找出您的表单是哪个索引。即0 1 2等
然后尝试
br.select.form(nr=1) #for the second form on the page for example
如果您需要获取文本输入的控件名称,请执行...
print br.form.controls
然后:
br.form['someLongCrap_UserName']='username'
br.form['someLongCrap_Password']='password'
br.submit()
答案 1 :(得分:0)
我不会接受我的回答,因为它不是&#34;正确的&#34;答案给出了我提供的提示,但selenium是一个很棒的解决方案,可以完全满足我的需求。我认为使用这种机械化可能会有一些速度降低,但我需要进行测试(并且没有一个可行的机械化解决方案使这很难)。
无论如何,根据我的需要,以下通用代码应该适合您:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
baseurl = "http://myurl.com";
username = "myUserName"
password = "myPassword"
mydriver = webdriver.Firefox()
mydriver.get(baseurl)
mydriver.maximize_window()
inputElement = mydriver.find_element_by_id("userNameInputBox")
inputElement.send_keys(username)
inputElement = mydriver.find_element_by_id("passWordInputBox");
inputElement.send_keys(password);
inputElement = mydriver.find_element_by_id("mySubmitButton");
inputElement.click();