Вопрос

Кстати ... Этот сайт работает только с 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">
                &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 = 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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top