2010-07-16 23 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腳本或其他。

相關問題