javascript - 使用请求登录到具有 javascript 登录表单的网站

标签 javascript python ajax post python-requests

首先让我说我的编程经验很少。在过去的几天里,我在尝试编写这个程序时学到了很多东西。我在 Windows 7 上使用 PyCharm、requests、Beautiful Soup 和 lxml 运行 Python 2.7。

我正在尝试从一个严重依赖 Javascript 的网站上抓取数据。我有两个选择:

1) 我需要的数据是通过 Javascript 填充的,不一定需要登录。但是我一直无法弄清楚如何获取这些数据。我已经使用实时 HTTP header chrome 插件实时监控 header ,我想我已经找到了它的 Javascript,但我无法弄清楚。它的代码很长,如果有人有兴趣看一下,我会发布它。

2) 在一个主要页面上,我发现了一系列 ID 号,我可以使用这些 ID 号为我正在分析的每个项目生成 URL。问题是我必须登录才能看到这些单独的项目页面。我的代码如下:

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

帖子或 get 都没有向我显示已登录的网站。 HTML 源代码中的日志表单 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。

还有一个带有这段代码的 logform.js

$("#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 取自该脚本中的 var url。我尝试过使用 USERNAME 和 USERPASS,我也尝试过在我的帖子中使用 uName 和 uPass,但这些都不起作用。

不确定如何继续前进。非常感谢任何帮助

最佳答案

您发布的最后一段 javascript 提供了关于为什么您的登录 POST 请求不起作用的线索。

根据 javascript,您应该在登录 POST 中发送如下所示的字典:

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

关于javascript - 使用请求登录到具有 javascript 登录表单的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946370/

相关文章:

python - 打开以两位数年份命名的文件-Python

python - 计算有向图中的累积流量

javascript - 在 Javascript 中解码 JSON 字符串

javascript - 使用 Javascript 上传进度(带或不带 XMLHttpRequest 2)

javascript - PHP 变量未在 Javascript 中回显

javascript - 显示启动屏幕,直到 Web 浏览器呈现页面

Python战舰游戏,递归故障

javascript - 设置内容包含图像标签的元素的 html 源

javascript - 如何在浏览器中使用JavaScript从&lt;input type ="file"/>获取curl -T --upload-data选项的等效数据格式?

javascript - 从定义的 <td> 获取值 (ASP.NET MVC)