تسجيل الدخول إلى شكل Ajax مع Python
-
25-09-2019 - |
سؤال
راجع للشغل ... هذا الموقع يعمل فقط مع Internet Explorer ....
أحاول إلغاء موقع الويب لعميل حتى أتمكن من أتمتة مهمة لهم. في الأساس ، سوف يتخلص من تقارير مختلفة ويبحث عن أوقات الدوران وإرسالها بالبريد الإلكتروني إلى العميل. يعمل برنامج التنسيق الخاص بي بشكل جيد ، والمشكلة التي أواجهها هي تسجيل الدخول إلى موقع الويب مع ميكانيكي لأن نموذج تسجيل الدخول يستخدم AJAX. لقد نظرت حولي عن حل ، لكن لا يمكنني العثور على ما أبحث عنه بالضبط.
فيما يلي نموذج HTML و (من ما يمكنني قوله) Ajax الذي يتولى ذلك.
دالة tranlogin () {var url = 'login.aspx؟ isajax = true & eventTarget = tranlogin' ؛ var postdata = form.serialize ('form1') ؛ ajaxrequest = new ajax.request (url ، {method: 'post' ، postbody: postdata ، onComplete: transloginfinish ، onFailure: ReporterRor ، Onexception: reportException}) ؛ }
وظيفة transloginfinishized (serverResponse) {if (requestFailed) return ؛ xmlnodes = serverResponse.Responsexml ؛ usrsite = "8000" ؛ usrcode = decodexmlchar (xmlnodes.getElementSbyTagName ('UserCode') [0] .Text) ؛ if (xmlnodes.getElementSbyTagName ('loginResult') [0] .Text == '-1') {Alert (decodexmlchar (xmlnodes.getElementSbyTagName ('failmsg') [0] .Text)) ؛ form.enable ('form1') ؛ إرجاع؛ } if (xmlnodes.getElementSbyTagName ('loginResult') [0] .Text == '20') {window.location.replace ('initpasswd.aspx؟ userSite =' + usrsite + '& usercode =' + usrcode) ؛ إرجاع؛ } if (xmlnodes.getElementSbyTagName ('loginResult') [0] .Text == '14') {window.location.replace ('chgpasswd.aspx؟ type = chgpwd & userSite =' + usrsite + '& usercode =' + usrcode) ؛ إرجاع؛ } if (xmlnodes.getElementSbyTagName ('loginResult') [0] .Text == '16') {window.location.replace ('chgpasswd.aspx؟ type = pwdexpire & userSite =' + usrsite + '& usercode =' + usrcode) ؛ إرجاع؛ } if (xmlnodes.getElementSbyTagName ('loginResult') [0] .Text == '0') {if (xmlnodes.getElementsByTagName ('pwDexpirEwarning') [0] .Text == '{var changepwdnow = window. تأكيد (decodexmlchar (xmlnodes.getElementSbyTagName ('pwdexpiremsg') [0] .Text)) ؛ if (changePwDnow == true) {window.location.replace ('chgpasswd.aspx؟ type = chgpwd & userSite =' + usrsite + '& UserCode =' + usrcode) ؛ إرجاع؛ } // var arg = {profrmsg: decodexmlchar (xmlnodes.getElementsByTagName ('pwdexpiremsg') [0] .Text) ، "، rtnval: 0} //] //} ؛ // var rtn = window.showmodaldialog ('../ modules/modalmessagebox.aspx' ، arg ، "dialogheight: 140px ؛ dialogwidth: 500px ؛ center: 1 ؛ status: no ؛") ؛ // if (rtn && rtn == 1) {// window.location.replace ('chgpasswd.aspx؟ type = chgpwd & userSite =' + usrsite + '& UserCode =' + usrcode) ؛ // إرجاع؛ //}
} if (jtrim ($ ('txthospcode'). value) == '') {hosplist = decodexmlchar (xmlnodes.getElementSbyTagName ('hosplist') [0] .text) .split ('|') ؛ if (hosplist.length <2) {selectHospCode = hosplist [0] .Split ('-') [0] ؛ TranselectHosp (SelectionHospCode) ؛ إرجاع؛ } $ ('divhosplist'). 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 = Mechanize.Browser ()
وعاء البسكويت
cj = cookielib.lwpcookiejar () br.set_cookiejar (CJ)
خيارات المتصفح
br.set_handle_equiv (صحيح)
br.set_handle_gzip (صحيح)
br.set_handle_redirect (true) br.set_handle_referer (true) br.set_handle_robots (false)
يتبع التحديث 0 ولكن لا يتم تعليقه على التحديث> 0
br.set_handle_refresh (Mechanize._http.httprefreshprocessor () ، max_time = 1)
وكيل المستخدم
Br.Addheaders = [('user-agent' ، '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 في متصفحك ، ومعرفة ما إذا كان لا يزال بإمكانك تسجيل الدخول إلى الموقع. إذا كان الأمر كذلك ، فحاول استخدام ميكانيكي مع هذه العملية.
- حاول تحديد تأثير نموذج AJAX (جانب الخادم وجانب العميل) ، ومحاولة محاكاةه باستخدام Python. إذا لم تجدها بالفعل ، فإن شيء مثل Firebug لا يقدر بثمن لهذا.
- استخدم إحدى المكتبات المختلفة التي تسمح للبيثون بالسيطرة على متصفح حقيقي. لم أفعل هذا مطلقًا ، لكنني أعلم أن هناك أغلفة على الأقل من Firefox و IE.