2010-07-16 72 views
1

我有一个Python脚本,需要一些变量。我也有一个可以接收邮政价值的html页面。如何使用python加载将值发布到url的浏览器会话?

如何从python启动浏览器并将其指向我上面的html页面并将这些发布变量发送到html网址?

我遇到的问题是,如果我使用urllib/urllib2来发布帖子,它不会加载浏览器窗口。如果我想加载浏览器窗口,我不能发送帖子到网址。

这是你如何做一个POST的URL,但它不打开浏览器,而是它可以接收像这样的值。但我不需要读取值,我需要打开Internet浏览器,将其指向特定的URL并将变量发布到该URL。

data = urllib.urlencode({"fileTitle" : "ThisFileName", "findtype" : "t", "etc" : "etc"}) 
f = urllib.urlopen("http://www.domain.com/someurl/", data) 
# Read the results back. 
s = f.read() 
s.close() 
+0

请carify:你使用什么操作系统? python脚本在哪里运行?为什么它被标记为php?浏览器窗口是什么意思?你想开始一个特定网站的本地浏览器?如果你发布 - 至少是相关部分 - 你的python脚本,它可能会有所帮助。 – jigfox 2010-07-16 09:17:05

+0

操作系统在这里并不重要,因为这个脚本可以在Windows,Linux和Mac上运行。它被标记为php,因为PHP用于获取POST变量。 我的意思是浏览器是用特定的URL加载IE/Chrome/Firefox。是的,我想用特定的网站网址启动本地浏览器。 – Martin 2010-07-16 09:22:16

回答

0

这似乎是获得我想要完成的唯一方法。

您可以使用urllib来调用存储数据的服务器上的页面(在sql表中或临时文件中)并返回一个唯一的ID。然后,您可以使用唯一标识从其已知来源获取该数据。

的Python代码会是这个样子:

import urllib 
data = urllib.urlencode({"postField1" : "postValue1", "postField2" : "postValue2", "etc" : "etc"}) 
f = urllib.urlopen("http://www.domain.com/storePostData.php", data) 
# At this point your storePostData.php file stores all the post 
# info in either an sql DB or temporary file so this can accessed later on and 
# an uuid is passed back which we now read below. In may case I store all post   
# fields in a sql DB and each column represents each post field. 
uuid = f.read() 
# the uuid is the sql table id field which is auto_incremented. 
# SO now we load the default browser below and send it the uuid so the php script 
# can access the sql data. Once it has been accessed and the form fields have been 
# received then we delete that row as the information is useless to us now that we 
# have filled in the forms fields 
import webbrowser 
webbrowser.open_new("http://www.domain.com/someOtherUrl?uuid=" + uuid) 

所有剩下的工作由PHP脚本,它存储的信息,然后根据获取的UUID的信息来完成。我不打算在这里提供代码的例子,因为这只是一般的知识,我所要做的就是通过这里获得概念。

我希望这可以帮助别人。

干杯

0

是否必须通过HTTP POST提供值?你可以提供参数作为URL的一部分,并使用GET来代替?

例如建立类似如下的URL:

http://somehost/somefile.html?param1=value1&param2=value2& ...

+0

不,通过GET方法提供的信息太多。它永远不会适合在网址上。 – Martin 2010-07-16 09:16:02

+0

也许你可以建立一个包含javascript的临时html文件来构建你的请求并提交它。然后调用浏览器加载临时文件? – Vortura 2010-07-16 09:38:42

+0

这是一种可能性。我曾想过使用urllib来调用存储数据的服务器上的页面(在sql表中或临时文件中)并返回一个唯一的ID。然后,当您打开浏览器并将其指向网址时,您可以执行诸如www.domain.com/urlstring&uuid=knfjkNh89HFndsadaFGJSss334之类的操作。然后,我可以使用唯一的ID从它已知的来源获取数据。只是想知道是否有一个更简单的方法来做到这一点。 – Martin 2010-07-16 10:08:07

0

“......这不加载浏览器窗口。”

对不起,我不完全明白你想做什么。但是,也许Selenium遥控器(RC)对你来说很有意思。您可以编写脚本来远程控制浏览器。它用于自动化测试。 Python也受支持。您可以让浏览器提交表单或点击链接,例如。到PHP脚本或其他。

相关问题