Javascript python mechanize-提交自定义表单

Javascript python mechanize-提交自定义表单,javascript,python,forms,mechanize,Javascript,Python,Forms,Mechanize,我正在连接一个需要使用mechanize登录的页面。它在头版使用了一些javascript,使得直接使用mechanize变得更加困难。我知道我必须提交什么样的表单才能登录——这个表单总是由js生成的,每次都是一样的。如何使mechanize只提交页面上没有的自定义表单?基本上与Python相同。解析页面,提取所需元素,重新设计页面,并将它们注入mechanize 对于我参与的一个项目,我不得不使用模拟浏览器,发现Mechanize在表单处理方面非常差。它将从Javascript块中拉出未被解释

我正在连接一个需要使用mechanize登录的页面。它在头版使用了一些javascript,使得直接使用mechanize变得更加困难。我知道我必须提交什么样的表单才能登录——这个表单总是由js生成的,每次都是一样的。如何使mechanize只提交页面上没有的自定义表单?基本上与Python相同。

解析页面,提取所需元素,重新设计页面,并将它们注入mechanize

对于我参与的一个项目,我不得不使用模拟浏览器,发现Mechanize在表单处理方面非常差。它将从Javascript块中拉出未被解释的元素,然后消亡。我必须编写一个变通方法,使用BeautifulSoup去除所有可能导致它在到达表单解析器之前死亡的位

你可能会也可能不会遇到这个问题,但这是需要记住的。我最终放弃了机械化方法,选择了Selenium。它的表单处理程序非常优秀,可以处理JS。它也有它的问题(浏览器增加了一层复杂性),但我发现它更容易使用。

(注意:最近又出现了这个问题,实际上我现在已经让它工作了。)

这似乎有效:

br.open(URL)
res = mechanize._form.ParseString(FORM_HTML, BASE_URL)
br.form = res[1]
#continue as if the form was on the page and selected with .select_form()
br['username'] = 'foo'
br['password'] = 'bar'
br.submit()
URL
是访问站点的完整URL
BASE\u URL
是URL所在的目录
FORM\u HTML
是任何具有
FORM
元素的HTML,例如:

<form method='post' action='/login.aspx'>
    <input type='text' name='username'>
    <input type='text' name='password'>
    <input type='hidden' name='important_js_thing' value='processed_with_python TM'>
</form>


出于某种原因,
mechanize.\u form.ParseString
返回两个表单。第一个是对基本URL的
GET
请求,无需输入;第二,从
form\uhtml

中正确解析的表单,如果可以的话,我会给你+100。你怎么知道的?网络上没有其他人想到这一点,许多人在没有这个解决方案的情况下被迫放弃。@mh..:哈哈,很高兴听到这个消息!我使用了很多mechanize,所以我想我只是在源代码中摸索,尝试了很多东西,最终使它工作了。。。