8

我是一个大型 GUI 应用程序的开发人员,我们有一个用于跟踪错误的网站。任何人都可以向错误跟踪站点提交新错误。我们可以从我们的桌面应用程序中检测到某些故障(即未处理的异常),在这种情况下,我们希望在用户预定义的浏览器中打开 submit-new-bug 表单,将我们可以收集到的有关故障的任何信息添加到某些表单字段. 我们可以使用 GET 或 POST http 方法检索 submit-new-bug 表单,并且可以为该表单提供默认字段值。所以从http服务器端来看,一切都很好。

到目前为止,我们可以使用Python 标准库中webbrowser模块成功打开一个 URL,并将默认值作为 GET 参数在 URL 中传递。但是,此方法有一些限制,例如某些浏览器(特别是 MS IE)允许的最大 URL 长度。该webbrowser模块似乎没有办法使用 POST 请求 URL。OTOH 有提供我们想要的控制类型urllib2模块,但 AFAIK 它缺乏在用户首选浏览器中打开检索到的页面的可能性。

有没有办法获得我们想要的这种混合行为(通过urllib2更高级别的功能进行精细控制webbrowser)?

PS:我们已经考虑过使用 检索 URL urllib2,将其内容保存到临时文件并使用 .打开该文件的可能性webbrowser。这是一个有点讨厌的解决方案,在这种情况下,我们将不得不处理其他问题,例如相对 URL。有更好的解决方案吗?

4

3 回答 3

8

这不是正确的答案。但它也有效

import requests
import webbrowser

url = "https://www.facebook.com/login/device-based/regular/login/?login_attempt=1&lwv=110"
myInput = {'email':'mymail@gmail.com','pass':'mypaass'}
x = requests.post(url, data = myInput)
y = x.text
f = open("home.html", "a")
f.write(y)
f.close()
webbrowser.open('file:///root/python/home.html')
于 2019-07-20T19:38:23.593 回答
6

我不知道有什么方法可以在 Web 浏览器中打开 POST 请求的结果,而无需将结果保存到文件并打开它。

采用替代方法并将数据临时存储在服务器上怎么样?然后可以在浏览器中使用简单的 id 参数打开页面,并显示保存的部分填充表单。

于 2011-12-26T16:36:20.967 回答
2

你可以使用tempfile.NamedTemporaryFile()

import tempfile
import webbrowser
import jinja2

t = jinja2.Template('hello {{ name }}!') # you could load template from a file
f = tempfile.NamedTemporaryFile() # deleted when goes out of scope (closed)
f.write(t.render(name='abc'))
f.flush()
webbrowser.open_new_tab(f.name) # returns immediately 

如果可以轻松修改服务器,则更好的方法是POST使用部分参数发出请求,并按照@Acorn 的建议urllib2使用服务器生成的打开 url 。webbrowser

于 2011-12-26T17:04:04.267 回答