2015-06-19 66 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

其关于网站政策变更的一般公告。我在浏览器中获得相同的重定向。它刚刚开始,昨天没有发生。 –