gpt4 book ai didi

javascript - 如何使用 Mechanize 提交 javascript 表单?

转载 作者:太空宇宙 更新时间:2023-11-04 09:12:14 24 4
gpt4 key购买 nike

我有完成登录的 Mechanize 脚本。登录后。页面首先显示重定向,然后进入主登录页面。

执行 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>

我真的不知道该怎么做,因为我是新手。

如何使用首次登录时提供的已验证数据提交此类表单?

还有如何向经过身份验证的用户提交更多的 POST 数据?

到目前为止我的代码:

import re
import mechanize

login_url = 'login.aspx'

def login(id, username, password):
br = mechanize.Browser()
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')]
br.open(login_url)
br.select_form(nr=0)
br.form.set_all_readonly(False)
br["__EVENTTARGET"] = "TransactBtn"
br["AccountID"] = id
br["UserName"] = username
br["Password"] = password
response = br.submit()
return response.geturl()
#after submitting this it goes to the redirect portal page then to the main page

def redirect(url):
#after login we submit the redirect portal to see the main page
br = mechanize.Browser()
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')]
br.open(url)
br.select_form(nr=0)
response = br.submit()
return response.read() #to the main

def dostuff():
#this will submit some data as POST with the authenticated user.

print redirect(login('myid', 'myusername', 'mypassword'))

最佳答案

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

因此,您必须在所有请求中共享一个 Browser 类实例。

login 函数看起来像做你需要的,尝试打印 br._ua_handlers['_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 并不重要。

关于javascript - 如何使用 Mechanize 提交 javascript 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com