python mechanize:创建并提交表单

python mechanize:创建并提交表单,python,html,screen-scraping,mechanize,Python,Html,Screen Scraping,Mechanize,我正在和mechanize连接一个网站。网站使用javascript创建自定义表单,并在创建表单后提交表单。我如何使用mechanize进行同样的操作,即:创建表单,添加与站点javascript相同的输入元素,然后提交它?这似乎有效: 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 s

我正在和mechanize连接一个网站。网站使用javascript创建自定义表单,并在创建表单后提交表单。我如何使用mechanize进行同样的操作,即:创建表单,添加与站点javascript相同的输入元素,然后提交它?

这似乎有效:

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\u HTML

正确解析的表单似乎可以工作:

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

正确解析的表单,你读过吗?:站点的javascript最终构造一个带有参数的URL并提交以获得结果。在一个简单的Python脚本中完成这个结束阶段并重建这个步骤,而不是试图模仿中间的javascript阶段,这难道不容易吗?@sgallen他不想解析和执行js代码,他想模仿它的功能。“至少我是这么理解的……”jadkik94表示同意。gauden上面讨论的路线与我提供的链接中包含的信息类似。我不确定在没有看到问题中的实际站点和OP试图使用的代码的情况下是否可以提供任何帮助。@sgallen:为什么?具体来说,网站做什么并不重要。我只想从我用python生成的一些HTML中创建一个ClientForm,并将其提交,就像我用mechanize打开的页面上存在该表单一样。它与javascript没有多大关系,只是站点碰巧使用了它(在浏览器中创建和提交非HTML表单的唯一方法是javascript)。据我所知,你提供的链接没有提供任何关于如何做到这一点的信息,mechanize文档也没有。你读过吗?:该网站的javascript最终构建了一个带有参数的URL并提交以获得结果。在一个简单的Python脚本中完成这个结束阶段并重建这个步骤,而不是试图模仿中间的javascript阶段,这难道不容易吗?@sgallen他不想解析和执行js代码,他想模仿它的功能。“至少我是这么理解的……”jadkik94表示同意。gauden上面讨论的路线与我提供的链接中包含的信息类似。我不确定在没有看到问题中的实际站点和OP试图使用的代码的情况下是否可以提供任何帮助。@sgallen:为什么?具体来说,网站做什么并不重要。我只想从我用python生成的一些HTML中创建一个ClientForm,并将其提交,就像我用mechanize打开的页面上存在该表单一样。它与javascript没有多大关系,只是站点碰巧使用了它(在浏览器中创建和提交非HTML表单的唯一方法是javascript)。据我所知,您提供的链接没有提供有关如何执行此操作的任何信息,mechanize文档也没有。查看源代码,mechanize始终为未嵌套在
标记中的任何输入创建“全局表单”。普通的
浏览器。forms
方法只选择第一个索引之后的表单。查看源代码,mechanize始终为未嵌套在
标记中的任何输入创建一个“全局表单”。普通的
Browser.forms
方法只选择第一个索引之后的表单。