2016-09-12 18 views
0

讓我首先爲我的新鮮事道歉。幾年前,一位朋友問我是否可以編寫一個程序來自動獲取替代教學開口。這並不是我所知道的一個領域,但是一對夫婦的教程讓我不顧一切地理解html(而不僅僅是關於Python)。自那時以來,腳本工作得很好,但今年他們的網站似乎已經重做並破壞了一些東西,這遠遠超出了我的理解。以前的表單字段不再被機械化的python腳本發現

我以前的代碼工作:

# Create a Browser instance 
b = mechanize.Browser() 
# Load the page 
b.open(loginURL) 

# Select the form 
b.select_form(nr=0) 

# Fill out the form 
b['id'] = 'XXXXXXXXXX' # Note: I edited out my friend's login info here for privacy 
b['pin'] = 'XXXX' 

b.submit(); 

仍只有一種形式,但現在控件的類型是「隱藏」,並且不我直接需要的不再的人。當我用開發人員模式檢查它時,我可以看到html中的舊字段,並且名稱相同,但我無法弄清楚(嘗試了一些不起作用的東西),現在我將如何訪問它們。下面是HTML:

<form id="loginform" name="loginform" method="post" action="https://www.aesoponline.com/login.asp?x=x&amp;&amp;pswd=&amp;sso="> 
 

 
    <input type="hidden" name="location" value=""> 
 
    <input type="hidden" name="qstring" value=""> 
 
    <input type="hidden" name="absr_ID" value=""> 
 
    <input type="hidden" name="foil" value=""> 
 

 

 
    <div style="margin: auto; text-align:center;"> 
 
    <div id="loginContainer" style="text-align: left;"> 
 
     <div id="loginContent"> 
 
     <div id="Div1" style="position:relative; left:65px;" class="hide-me-for-rebranding"> 
 
      <a href="http://www.frontlinetechnologies.com"> 
 
      <img src="images/frontlinelogo.png" border="0"> 
 
      </a> 
 
     </div> 
 
     <div id="loginLoginBox" style="position:relative;"> 
 
      <div id="loginAesopLogo" style="padding-bottom:0px;" class="hide-me-for-rebranding"></div> 
 
      <!--endloginAesopLogo--> 
 
      <div id="loginLoginFields" style="margin-top:0px;"> 
 
      <br> 
 

 
      <table> 
 
       <tbody> 
 
       <tr height="25px"> 
 
        <td width="30px"><span class="corrLoginFormText">ID:</span> 
 
        </td> 
 
        <td> 
 
        <input type="text" class="loginFormText" maxlength="80" id="txtLoginID" name="id" value=""> 
 
        </td> 
 
       </tr> 
 
       <tr height="25px"> 
 
        <td width="30px"><span class="corrLoginFormText">Pin:</span> 
 
        </td> 
 
        <td> 
 
        <input type="password" class="loginFormText" maxlength="20" id="txtPassword" name="pin"> 
 
        </td> 
 
       </tr> 
 
       </tbody> 
 
      </table> 
 

 
      <table> 
 
       <tbody> 
 
       <tr height="30px"> 
 
        <td width="75px" valign="top"> 
 
        <a class="textButton" id="loginLink" name="loginLink" href="#"><span style="white-space:nowrap;">Login</span></a> 
 
        <input type="hidden" id="submitLogin" name="submitLogin" value="1"> 
 
        </td> 
 
        <td> 
 

 
        <div id="loginhelp" style="float:right;"> 
 
         <img src="images/icon.pinreminder.png" alt="pin" width="10" height="15" align="top"><a href="forgot_pin.asp">Pin Reminder</a> 
 
         <br> 
 
         <img src="images/icon.loginproblems.png" alt="login" width="11" height="17" align="top"> <a href="http://help.frontlinek12.com/Employee/Docs/ClientServicesHelpGuide-LoginProblems.pdf">Login Problems</a> 
 
        </div> 
 

 
        </td> 
 
       </tr> 
 
       </tbody> 
 
      </table> 
 
      </div> 
 
      <!--endloginLoginFields--> 
 
      <div id="errorLabel" style="position: absolute; top: 170px; left:5px;margin:0px;"><span class="assistanceText"></span> 
 
      </div> 
 
     </div> 
 
     <!--endloginLoginBox--> 
 
     <div id="loginContentText"> 
 
      <span class="loginContentHeader">Welcome To Absence Management</span> 
 
      <br> 
 
      <span class="loginContentText"> 
 
     \t \t \t \t You are about to enter Frontline Absence Management!<br> Please enter your ID and PIN to login to your account, or click the button below to learn more about Frontline's growing impact on education.</span> 
 
      <br> 
 
      <a class="textButton" href="http://www.frontlinek12.com/Products/Aesop.html"><span>Learn More</span></a> 
 

 
     </div> 
 
     <!--endloginContentText--> 
 

 
     </div> 
 
     <!--endLoginContent--> 
 
     <div id="loginFooterShading" class="hide-me-for-rebranding"> 
 
     <div id="loginFooterLeft"></div> 
 
     <div id="loginFooterRight"></div> 
 
     </div> 
 
     <!--endloginFooterShading--> 
 
     <div id="loginFooter" style="text-align:center;width:725px;"> 
 
     <a href="http://www.frontlinetechnologies.com/Privacy_Policy.html" style="color: rgb(153, 0, 0) ; font-size:9px;" target="_blank">Privacy Policy</a> 
 
     <br>© Frontline Technologies Group LLC &lt; 
 
     <parm1>&gt; 
 
      <br>All rights reserved. Protected under US Patents 6,334,133, 6,675,151, 7,430,519, 7,945,468 and 8,140,366 with additional patents pending. 
 
     </parm1> 
 
     </div> 
 
     <!--endloginReflections--> 
 
    </div> 
 
    <!--endLoginContainer--> 
 

 

 
    </div> 
 
    <!--end margin div --> 
 
    <!-- MODAL DIALOG --> 
 
    <div id="basicModalContent" style="display:none"> 
 
    <span class="assistanceText"></span> 
 
    </div> 
 
</form>

任何援助將不勝感激。非常感謝你。

回答

0

嘗試這樣的事情,如果該HTML代碼正是在該網頁上。當你把b.select_form(nr = 0)有可能出於某種原因,第一種形式不是你所選擇的。通過在b.select_form()中查找表單名稱,可以確保找到正確的表單。測試一下,看看它是否成功。

import mechanize 
b = mechanize.Browser() 
b.open(loginURL) 
#since the actual form is named loginform just select it 
b.select_form("loginform") 
b['id'] name of login input field 
b['pin'] 
b.submit() 
+0

這是我之前嘗試過的東西之一,但不幸的是它沒有幫助(只是再次嘗試以確保它,並給我一個錯誤: ControlNotFoundError:沒有控件匹配名稱'id')。 頁面似乎只有一種形式(使用我發現打印所有表格的一些代碼)。 非常感謝您的建議。 –

0

試試這個:

b = mechanize.Browser() 
b.set_handle_equiv(False) 
b.set_handle_robots(False) 
b.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64; rv:18.0)Gecko/20100101 Firefox/18.0 (compatible;)'),('Accept', '*/*')] 
b.open(loginURL).read() 

b.select_form(nr=0) 

b['id'] = 'XXX' 
b['pin'] = 'XXX' 

resp = b.submit() 
print resp.read() 

這對我的作品!