0

requests我正在尝试使用模块登录网站。我认为登录表单是用javascript编写的。我需要识别包含用户名和密码的表单名称。我尝试使用 Firebug 对其进行排序,将鼠标悬停在Username网站上的字段上,代码如下:

<div id="ctl00_main_login_dvUserTxt" class="dvUsr visible">
<input id="ctl00_main_login_UserNameText" class="f10 b txMain tx" type="text" 
ondrop="javascript: return false;" ondrag="javascript: return false;" oncut="javascript:  
return false;" oncontextmenu="javascript: return false;" onblur="javascript: return 
false;" onpaste="javascript: return false;" oncopy="javascript: return false;" 
autocomplete="off" tabindex="1" readonly="readonly" maxlength="20" value="Uzytkownik" 
name="ctl00$main$login$UserNameText"> 

我对密码做了同样的事情,并尝试了这些的任何组合,但没有一个是正确的。

我还查找了页面源,这是我认为合适的功能:

<div>
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"  
value="/wEPDwULLTE2NjY0NzYzMDhkZBd9ab2vcPcoEfqJ+ZqlPm7gs1iA" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
    theForm = document.aspnetForm;
 }
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>

我认为eventTarget可能是用户名表单,但不是。

我是否在寻找表单名称的正确路径上,或者我如何才能真正识别这些表单名称?

4

1 回答 1

1

我会使用http://www.crummy.com/software/BeautifulSoup/或类似的东西来分析数据并找到您需要的元素,即使这样也可以尝试自己构建解析器要容易得多.

或者更轻量级的库:http ://scrapy.org/

并且表单名称是aspnetForm,并且您的帖子中没有描述用户名和密码字段,它可能在数据中更早。尝试搜索<form并找到<input介于两者之间的每个</form

基本上你正在寻找的是介于两者之间的一切:

<form ...>

*all <input> objects*

</form>

另外,你在做什么..更容易签入说:Firefox + https://addons.mozilla.org/En-us/firefox/addon/tamper-data/

这样您就可以看到发送到服务器的实际 POST 数据,并且您可以忽略几乎所有的 Web 解析,直接进入流程的 POST 部分。(可能会从隐藏的输入字段中获得一些 ID,但是嗯……你想通了)

于 2013-05-14T16:51:24.360 回答