Python Mechanize无法找到特定的表单或控件

时间:2014-05-09 18:55:16

标签: login mechanize

我正在尝试使用python mechanize登录。

表单代码很简单:(我也简化了它)

<form onsubmit="return(doSubmit());" action="/pkmslogin.form" method="post" name="frmLogin">
<input type="text" size="9" maxlength="128" value="" name="userid">
<input type="password" size="20" maxlength="46" value="" name="password">
<input type="submit" onclick="if (setReqURL()==false) return false; if (checkCookiesAtField(userid)) return true; else return false;" value=" OK " name="btnSubmit">

但是,当我尝试找到表格或控制元素时,我会得到controlnotfounderror。

输入:

    for f in br.forms():     
        print f

输出:

  <GET https://www.domain.com/pkmslogin.form application/x-www-form-urlencoded
  <TextControl(<None>=)>
  <TextControl(<None>=)>
  <TextControl(<None>=)>
  <TextControl(<None>=)>
  <TextControl(<None>=)>>
  <frmDummy GET https://www.domain.com/pkmslogin.form application/x-www-form>

使用FF Inspect Element或Firebug时,它清楚地将第一个表单的名称显示为“loginform”,输入框为“userid”和“password”。

我已经不知疲倦地试图解决这个问题。

非常感谢任何帮助。

这是我的代码..非常基本,但不成功。我觉得这将是一个cookie问题。但我不确定这个网站是如何构建cookie的。

    from bs4 import BeautifulSoup
    import urllib2, urllib
    import requests
    import mechanize
    import cookielib
    import html2text
    import csv
    import sys, logging
    import time
    import os


    br = mechanize.Browser()

    cj = cookielib.LWPCookieJar()
    br.set_cookiejar(cj)

    # Browser options
    br.set_handle_equiv(True)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

    # User-Agent 
    br.addheaders = [('User-agent', 'Mozilla/5.0 ]

    br.open('https://www.domain.com/pkmslogin.form')
    time.sleep(2)
    br.select_form(nr=1)
    # br.form['userid'] = "****"
    # br.form['password'] = "************"
    #br.submit()

编辑添加: 在登录页面上: 如果我:

sdata = br.response().read()
soup = BeautifulSoup(sdata)
print soup

我在表单字段中得到了这个:

document.write("<td align=left><input type=\"text\" name=\"userid\" value=\"\" maxlength=\"128\" size=\"30\"></td>");
document.write("<td align=left><input type=\"password\" name=\"password\" value=\"\" maxlength=\"46\" size=\"30\">");

如果这有帮助......希望它能做到......

0 个答案:

没有答案