Войдите в Ajax Form с Python
-
25-09-2019 - |
Вопрос
Кстати ... Этот сайт работает только с Internet Explorer ....
Я пытаюсь ловить сайт для клиента, чтобы я мог автоматизировать для них задачу. По сути, это будет соскрешено для разных отчетов и искать поворот вокруг раз и отправить их по электронной почте клиенту. Моя программа «Crapce» работает нормально, проблема, которую я имею вход в веб-сайт с механизмом, поскольку форма входа использует AJAX. Я оглянулся к решению, но не могу найти именно то, что я ищу.
Ниже приведена форма HTML и (из того, что я могу сказать) Ajax, который обрабатывает его.
Функция TranLogin () {var url = 'login.aspx? isajax = true & eventtarget = tranlogin'; var postdata = form.serialize ('form1'); ajaxrequest = новый ajax.request (URL, {Метод: 'post', postbody: postdata, oncomplete: Transloginfined, Onfailure: ReportError, Onexception: ReportException}); }
Функция Transloginfined (ServerResponse) {Если (relognedfailed) возврат; xmlnodes = serverResponse.responsexml; USRSite = «8000»; USRCode = decodexmlchar (xmlnodes.getelementsbytagname ('usercode') [0] .text); Если (xmlnodes.getelementsbytagname ('loginresult') [0] .text == '-1') {alert (decodexmlchar (xmlnodes.getelementsbytagname ('failmsg') [0] .text)); Form.enable ('form1'); вернуть; } Если (xmlnodes.getelementsbytagname ('loginelementsbytagname (' loginresult ') [0] .text ==' 20 ') {window.location.replace (initpasswd.aspx? usersite =' + usrsite + '& usercode =' + usrcode); вернуть; } Если (xmlnodes.getelementsbytagname ('loginelementsbytagname (' loginresult ') [0] .text ==' 14 ') {window.location.replace (' chgpasswd.aspx? type = chgpwd & usersite = '+ usrsite +' & usercode = '+ usrcode); вернуть; } Если (xmlnodes.getelementsbytagname ('loginelementsbytagname (' loginresult ') [0] .text ==' 16 ') {window.location.replace (' chgpasswd.aspx? type = pwdexpire & usersite = '+ usrsite +' & usercode = '+ usrcode); вернуть; } Если (xmlnodes.getelementsbytagname ('loginresult') [0] .text == '0') {Если (xmlnodes.getelementsbytagname ('pwdexpirewarning') [0] .text == 'true') {var changepwdnow = window. Подтвердите (Decodexmlchar (xmlnodes.getelementsbytagname ('pwdexpiremsg') [0] .text)); Если (changePwdnow == true) {window.location.replace ('chgpasswd.aspx? type = chgpwd & usersite =' + usrsite + '& usercode =' + usrcode); вернуть; } // var arg = {printmsg: decodexmlchar (xmlnodes.getelementsbytagname ('pwdexpiremsg') [0] .text), // Кнопки: [{Значение: «Да», RTNVAL: 1}, // {Значение: "Нет «RTNVAL: 0} //] //}; // var rtn = window.showmodaldialog ('.. Модули / modalmessagebox.aspx', arg, "Dialogheight: 140px; диалог: 500px; Центр: 1; Статус: Нет;"); // если (rtn && rtn == 1) {// window.location.replace ('chgpasswd.aspx? type = chgpwd & usersite =' + usrsite + '& usercode =' + usrcode); // вернуть; //}
} Если (JTRIM ($ ('txthospcoDode'). Значение) == '') {hosplist = decodexmlchar (xmlnodes.getelementsbytagname ('hosplist') [0] .text) .split ('|' '); if (hosplist.length <2) {selectionhospcode = hosplist [0] .split ('-') [0]; Translecthosp (oldurehospcode); вернуть; } $ ('divosplist'). style.display = 'Block';
for(i=0;i<hospList.length;i++)
{
if (hospList[i] != '')
{
divHospCode = document.createElement("div");
divHospCode.className='divHospCode';
$('divHospListBG').appendChild(divHospCode);
lnkHospCode = document.createElement("a");
if (hospList[i].length <= 33)
lnkHospCode.innerText = hospList[i];
else
lnkHospCode.innerText = hospList[i].substr(0,30) + '...';
lnkHospCode.title = hospList[i];
lnkHospCode.className = 'lnkHospCode';
divHospCode.appendChild(lnkHospCode);
lnkHospCode.onmouseover = function(){this.style.color = '#000000';}
lnkHospCode.onmouseout = function(){this.style.color = '#6c6c6c';}
lnkHospCode.onclick = function(){TranSelectHosp(this.innerText.split('-')[0]);}
if (i > 7 && $('divHospListBG').style.overflow != 'auto')
{
$('divHospListBG').style.height = '198px';
$('divHospListBG').style.overflow = 'auto';
}
}
}
return;
}
else
{
TranSelectHosp(JTrim($('txtHospCode').value));
}
}
}
<form name="Form1" method="post" action="login.aspx" id="Form1">
Входной код учетной записи: <div class="divRight">
<input name="txtHospCode" type="text" id="txtHospCode" class="inputClass" maxlength="4" />
</div>
<div class="divLeft">
<span>Input User Code:</span>
</div>
<div class="divRight">
<input name="txtUserCode" type="text" id="txtUserCode" class="inputClass" maxlength="6" />
</div>
<div class="divLeft">
<span>Input Password:</span></div>
<div class="divRight">
<input name="txtPassword" type="password" id="txtPassword" class="inputClass" />
</div>
<div class="divLeft">
<span>Login As:</span>
</div>
<div class="divRight">
<input type="radio" name="rdLoginType" value="D" checked="checked" />Doctor
<input type="radio" name="rdLoginType" value="T" />Other
</div>
<div class="divLeft">
</div>
<div class="divRight">
<input class="buttonClass" id="btnOK" type="button" value="Enter" onclick="LoginIn();" />
<input class="buttonClass" id="btnReset" type="button" value="Reset" onclick="ResetInput();" />
</div>
Мой код до сих пор
import mechanize
import cookielib
from BeautifulSoup import BeautifulSoup
import html2text
import re
Нестельный браузер
br = mevanize.browser ()
Печенье банка
CJ = cookielib.lwpcookiejar () br.set_cookiejar (CJ)
Опции браузера
br.set_handle_equiv (true)
br.set_handle_gzip (true)
br.set_handle_redirect (true) br.set_handle_referer (true) br.set_handle_robots (false)
Следует обновить 0, но не зависает на обновлении> 0
BR.SET_HANDLE_REFRESH (MESCHIZE._HTTP.HTTTPREFRESPPROCESSOR (), MAX_TIME = 1)
Пользовательский агент
br.addheaders = [(«пользователь-агент», «Mozilla / 4.0 (совместимый; MSIE 7,0b; Windows NT 6.0) ')
def login_to_website (login_url, login_form_name, usr_form_name, pwd_form_name, acct_code_name, usr, pwd, acct_code): "" "журналы пользователя на сайт" "" "
# Open the url of the login page
br.open(login_url)
# Select the login form name
br.select_form(login_form_name)
# Enter user's credentials into the form
br.form[acct_code_name] = acct_code
br.form[usr_form_name] = usr
br.form[pwd_form_name] = pwd
br.find_control(name='rdLoginType').value = ['T']
# Submit the form
print "Logging in as:", usr
br.submit()
# print current url
print "We are now at:", br.geturl()
# print error
if br.geturl() == login_url:
print "Login Failed"
else: print "Successfully logged in"
login_to_website (https://www.website.com ',' form1 ',' txtusercode ',' txtpassword ',' txthospcode ', usr, pwd, acctcode)
Решение
Механизировать не так далеко, насколько я знаю, обрабатывать JavaScript. Таким образом, ваши варианты, в грубом порядке того, что я бы попробую:
- Выключите JavaScript в своем браузере и посмотрите, можете ли вы войти в систему на сайт. Если это так, попытаться использовать механизировать с этим процессом.
- Попробуйте выработать, какой эффект формы AJAX (как сторона серверов, так и сторона клиента), и попытка эмулировать его с помощью Python. Если вы еще этого не нашли, что-то вроде Firebug является бесценным для этого.
- Используйте одну из различных библиотек, позволяющих Python контролировать реальный браузер. Я никогда не делал этого, но я знаю, что есть обертки по крайней мере для Firefox и IE.