سؤال

راجع للشغل ... هذا الموقع يعمل فقط مع 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">
                &nbsp;<input type="radio" name="rdLoginType" value="D" checked="checked" />Doctor&nbsp;&nbsp;
                <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.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top