如何使用Mechanize提交javascript表单?

如何使用Mechanize提交javascript表单?,javascript,asp.net,python,mechanize,Javascript,Asp.net,Python,Mechanize,我已经机械化脚本,完成登录。 登录后。在进入登录主页面之前,该页面首先显示重定向 执行redirect()返回登录页面。为什么? 执行login()会给我提供此页w/c是正确的,但仍需要继续到主页 <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> </title></head> <body> <form name="form1" method

我已经机械化脚本,完成登录。 登录后。在进入登录主页面之前,该页面首先显示重定向

执行redirect()返回登录页面。为什么?

执行login()会给我提供此页w/c是正确的,但仍需要继续到主页

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
     <form name="form1" method="post" action="tmp.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZCOgyU+AdP30f85W4DdUIV6LnCqa" />
</div>

      <script type="text/javascript">
          top.location.href = document.location.href;
          document.forms["form1"].submit();
      </script>
          &nbsp;&nbsp;</form>
      </body>
</html>

Mechanize不支持javascript。
您应该看看,它的功能与mechanize几乎相同,但可以处理javascript。

mechanize不支持javascript。
您应该看看,它的功能与mechanize几乎相同,但处理javascript。

我认为您遇到了这个问题,因为您正在为任何请求创建mechanise的新实例。Mechanise有点像浏览器,有cookies存储等等。重新创建它的对象完全就像清除浏览器中的所有数据

所以,您必须在所有请求中共享Browser类的一个实例

login
函数看起来像是在做您需要的事情,请尝试打印
br.\u ua\u handlers['''u cookies']。cookiejar
以确保服务器上的登录处理程序设置了所有cookie,然后使用相同的浏览器实例来提取您需要的页面

我认为最好的方法是创建一个类并设置它的类变量

class MyWorker(object):
    def __init__(self):
        self._br = mechanize.Browser()
        self._br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

    def login(self):
        self._br.open(login_url)
        self._br.select_form(nr=0)
        self._br.form.set_all_readonly(False)
        self._br["__EVENTTARGET"] = "TransactBtn"
        self._br["AccountID"] = id
        self._br["UserName"] = username
        self._br["Password"] = password   
        self._br.submit()

我可能错了,但这里的Javascript看起来并不重要

我认为您遇到了这个问题,因为您正在为任何请求创建mechanise的新实例。Mechanise有点像浏览器,有cookies存储等等。重新创建它的对象完全就像清除浏览器中的所有数据

所以,您必须在所有请求中共享Browser类的一个实例

login
函数看起来像是在做您需要的事情,请尝试打印
br.\u ua\u handlers['''u cookies']。cookiejar
以确保服务器上的登录处理程序设置了所有cookie,然后使用相同的浏览器实例来提取您需要的页面

我认为最好的方法是创建一个类并设置它的类变量

class MyWorker(object):
    def __init__(self):
        self._br = mechanize.Browser()
        self._br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

    def login(self):
        self._br.open(login_url)
        self._br.select_form(nr=0)
        self._br.form.set_all_readonly(False)
        self._br["__EVENTTARGET"] = "TransactBtn"
        self._br["AccountID"] = id
        self._br["UserName"] = username
        self._br["Password"] = password   
        self._br.submit()

我可能错了,但这里的Javascript看起来并不重要

这已经在提交表单了。实际问题是什么?提交表单后,response.read()是一个重定向页面。这是否意味着它已经完成了?另外,如何使用经过身份验证的用户发送更多数据?就像我想删除这篇文章一样。我只有在登录后才能这样做。我能看一个简单的例子吗?谢谢。这已经在提交表格了。实际问题是什么?提交表单后,response.read()是一个重定向页面。这是否意味着它已经完成了?另外,如何使用经过身份验证的用户发送更多数据?就像我想删除这篇文章一样。我只有在登录后才能这样做。我能看一个简单的例子吗?谢谢。我试过selenium,但安装时出错。我的py版本是2.4..如何更新到最新版本?我读到selenium不支持旧的py。您是否尝试卸载所有关于Python2.4的内容(保留一个包含您正在使用的所有模块名称的文件)并正确安装Python2.7?可能不是最好的方法,对此我很抱歉,但可能是一个解决方案!也许你也可以看看scrapy。但我不知道它支持什么版本的python。和seleniumI尝试的selenium相比,scrapy的入门时间要长得多,但我在安装它时出错了。我的py版本是2.4..如何更新到最新版本?我读到selenium不支持旧的py。您是否尝试卸载所有关于Python2.4的内容(保留一个包含您正在使用的所有模块名称的文件)并正确安装Python2.7?可能不是最好的方法,对此我很抱歉,但可能是一个解决方案!也许你也可以看看scrapy。但我不知道它支持什么版本的python。开始使用scrapy要比Selenium长得多你能详细介绍一下吗?我对这真的很陌生。谢谢:)还有,我如何从课堂上调用登录?你能详细说明一下吗?我对这真的很陌生。谢谢:)还有,我如何从类中调用login?