使用请求登录到一个网站,有JavaScript的登录表单
问题描述:
让我先说我有很少的编程经验作序。在过去的几天里,我学到了一大堆试图编写这个程序的文章。我在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 </label><input tabindex="0" id="LogName" class="LogInput" value="" />
</div>
<div class="LogLabel">
<label for="LogPass" >User Password </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与我的职位,但这些没有工作要么。
不知道如何前进这里。任何帮助,非常感谢
答
您发布的JavaScript的最后一位给出了一个线索,为什么你的登录POST请求不起作用。
据的JavaScript,你应该发送的字典,这些看起来像你的登录POST如下:
{
'ZACTION': 'AJAX',
'ZMETHOD': 'LOGIN',
'func': 'LOGIN',
'USERNAME': '<enter username>',
'USERPASS': '<enter password>'
},
那精美的作品。现在看起来很明显。谢谢一堆。我有一个新的问题,现在(例如是编码即时通讯开始实现的性质):我所有的被重定向到一个公告页面,而不是页面与内容IM后... –
什么样的消息?您应该在浏览器*问这些页面,并查看实际发送的页面请求中的内容。这可能是因为你在头文件中丢失了某些东西。 – junnytony
其关于网站政策变更的一般公告。我在浏览器中获得相同的重定向。它刚刚开始,昨天没有发生。 –