在机械化中提交表单后,如何获取响应页面的URL?

时间:2014-03-02 21:55:52

标签: python forms mechanize

使用mechanize(和python)我可以访问网站,登录,查找表单,填写一些答案,然后提交该表单。但是,我不知道如何打开"响应"页面 - 即您提交表单后自动加载的页面。

这是python代码:

br.select_form(name="simTrade")
br.form["symbolTextbox"] = "KO"
br.form["quantityTextbox"] = "10"
br.form["previewOrderButton"]

preview = br.submit()
print preview.read

使用上面的代码,我可以查看响应页面的内容。但我想实际打开该页面并与之交互。我怎么能用机械化呢?谢谢。

编辑:所以我在发布这个问题后不久就回答了我自己的问题。这是代码:

br.select_form(name="simTrade")
br.form["symbolTextbox"] = symbol
br.form["transactionTypeDropDown"] = [order_type]
br.form["quantityTextbox"] = amount
br.form["previewOrderButton"]

no_url = br.submit()
final = no_url.geturl()
x = br.open(final)
print x.read()

要获取响应页面的html源代码(提交表单时加载的页面),我只需要获取br.submit()的url。并且有一个内置的机械化函数,geturl()。

2 个答案:

答案 0 :(得分:0)

获取新页面的URL并打开它是没有必要的。提交表单后,新页面将自动打开,您可以使用相同的机械化浏览器对象开始与其进行交互。

使用问题中的原始代码,如果您想提交表单并将新页面上的所有链接存储在列表中:

br.select_form(name="simTrade")
br.form["symbolTextbox"] = "KO"
br.form["quantityTextbox"] = "10"
br.form["previewOrderButton"]
br.submit()

# Here we store all links on the new page
# but we can use br do any necessary processing.
links = [link for link in br.links()]

# This will take us back to the original page with the "simTrade" form.
br.back()

答案 1 :(得分:0)

OP的答案有点复杂,导致AttributeError。这对我来说效果更好:

br.submit()
base_url = br.geturl()
print base_url