2015-06-19 95 views
2

讓我先說我有很少的編程經驗作序。在過去的幾天裏,我學到了一大堆試圖編寫這個程序的文章。我在Windows 7上使用PyCharm,請求,美麗的湯和lxml運行Python 2.7。使用請求登錄到一個網站,有JavaScript的登錄表單

我試圖從一個網站,在很大程度上依賴於JavaScript抽取數據。我有兩個選擇:

1)我需要的數據是通過JavaScript填充,並不一定需要登錄。但是我一直無法知道如何獲取這些數據。我使用Live HTTP Headers chrome插件來監控標頭,我想我已經找到了這樣做的Javascript,但我無法解決這個問題。它有很長的一段代碼,如果有人有興趣看一下,我會發布它。

2)我發現了一個系列的,我可以用它來生成的URL爲每個單獨的項目,我分析的ID號的主要頁面之一。問題是我必須登錄才能看到這些單獨的項目頁面。我的代碼如下:

from requests.adapters import HTTPAdapter 
from requests.packages.urllib3.poolmanager import PoolManager 
from BeautifulSoup import BeautifulSoup 
import ssl 

# Request a date from user 
UDate = "06/22/2015" # raw_input('Enter a date mm/dd/yyyy\n') 

# Open TLSv1 Adapter (Whataver that means) 
class MyAdapter(HTTPAdapter): 
    def init_poolmanager(self, connections, maxsize, block=False): 
     self.poolmanager = PoolManager(num_pools=connections, 
             maxsize=maxsize, 
             block=block, 
             ssl_version=ssl.PROTOCOL_TLSv1) 

# Begin a requests session. Every get from here on out will use TLSv1 Protocol 
import requests 

payload = { 
    'LogName': 'xxxxxxxx', 
    'LogPass': 'xxxxxxxx' 
} 

s = requests.Session() 
s.mount('https://xxxx.xxx', MyAdapter()) 

# Login with post and Request source code from main page. 
log = s.post('LoginURL', data=payload) 
print log.text 

result = s.get(url) 
soup = BeautifulSoup(result.content) 
print soup 

郵件或獲取都不顯示我登錄的網站。從HTML源代碼logform ID的是這樣的:

<div id="DivLogForm"> 
     <label for="BadText"><div id="BadText" class="BadText" style="display:none" tabindex="-2">User Name or Password is Invalid</div></label> 

     <div class="LogLabel"> 
      <label for="LogName" > User Name&nbsp;&nbsp;</label><input tabindex="0" id="LogName" class="LogInput" value="" /> 
     </div> 
     <div class="LogLabel"> 
      <label for="LogPass" >User Password&nbsp;&nbsp;</label><input tabindex="0"id="LogPass" type="password" class="LogInput" value="" /> 
     </div> 

所以我路過LOGNAME和LogPass與職。

還擁有這段代碼

$("#LogButton").click(function() 
     { //$('#divLogForm').hide(); 
      //$('#divLoading').show(); 

      var uName = $("#LogName").val(); 
      var uPass = $("#LogPass").val(); 
      var url = "/index.cfm"; 
      $.post(url, {ZACTION:'AJAX',ZMETHOD:'LOGIN',func:'LOGIN',USERNAME:uName, USERPASS:uPass}, 
        function(data){if (data.isOk =="YES"){location.href="/index.cfm";} 
            else {$('.BadText').show(); $('#BadText').focus();}; 
           },"json"); 
     }); 

的LoginURL在我的代碼logform.js從VAR URL採取了這種腳本。我已經使用用戶名&爲userpass試過,我曾嘗試UNAME和uPass與我的職位,但這些沒有工作要麼。

不知道如何前進這裏。任何幫助,非常感謝

回答

1

您發佈的JavaScript的最後一位給出了一個線索,爲什麼你的登錄POST請求不起作用。

據的JavaScript,你應該發送的字典,這些看起來像你的登錄POST如下:

{ 
    'ZACTION': 'AJAX', 
    'ZMETHOD': 'LOGIN', 
    'func': 'LOGIN', 
    'USERNAME': '<enter username>', 
    'USERPASS': '<enter password>' 
}, 
+0

那精美的作品。現在看起來很明顯。謝謝一堆。我有一個新的問題,現在(例如是編碼即時通訊開始實現的性質):我所有的被重定向到一個公告頁面,而不是頁面與內容IM後... –

+0

什麼樣的消息?您應該在瀏覽器上訪問這些頁面,並查看實際發送的頁面請求中的內容。這可能是因爲你在頭文件中丟失了某些東西。 – junnytony

+0

其關於網站政策變更的一般公告。我在瀏覽器中獲得相同的重定向。它剛剛開始,昨天沒有發生。 –