2010-11-02 55 views
3

我使用mechanize來填充表單,並遇到動態填充下拉列表的問題,這些列表依賴於以前的選擇。Python機械化與動態下拉選擇

在機械化,我做這樣的事情,選擇類別:

import mechanize 
br = mechanize.Browser() 
"""Select the form and set up the browser""" 
br["state"] = ["California"] 
br["city"] = ["San Francisco"] # this is where the error is 
br.submit() 

我不能選擇城市作爲「舊金山」,直到我選擇狀態爲「加利福尼亞」,因爲城市下拉列表在選擇「California」後動態填充。

如何使用Python提交城市並進行機械化?

回答

1

mechanize不支持JavaScript。相反,您應該使用urllib2發送所需的值。

import urllib2 
import urllib 

values = dict(state="CA", city="SF") # examine form for actual vars 
try: 
    req = urllib2.Request("http://example.com/post.php", 
          urllib.urlencode(values)) 
    response_page = urllib2.urlopen(req).read() 
except urllib2.HTTPError, details: 
    pass #do something with the error here... 
+0

這會提交,不是嗎?我想這意味着我不能在機械化中做到這一點,因爲我需要Javascript。我也沒有看到urllib2如何支持Javascript,因爲從你的例子來看,它仍然無法挑選城市 – Lionel 2010-11-04 04:58:05

+0

@Lionel - 不,你必須事先知道JavaScript是如何填充下拉菜單的。檢查JavaScript並創建它所做的後期值不應太難。 – 2010-11-04 05:30:49

+0

好的一點,我會學習Javascript來獲取帖子值。 – Lionel 2010-11-09 03:15:19