2014-01-10 64 views
2

我登錄到一個網頁,他們奇怪的是有一個名爲login_email和兩個表單輸入稱爲login_password表單輸入。我需要同時設置的值,但簡單的通話form['login_password']拋出一個錯誤:蟒蛇機械化處理兩個參數同名

File "/Library/Python/2.7/site-packages/mechanize/_form.py", line 3101, in find_control 
    return self._find_control(name, type, kind, id, label, predicate, nr) 
    File "/Library/Python/2.7/site-packages/mechanize/_form.py", line 3183, in _find_control 
    raise AmbiguityError("more than one control matching "+description) 
mechanize._form.AmbiguityError: more than one control matching name 'login_password' 

我只需要找到一種方法,在同一時間提交form['login_password'] = "Password"form['login_password'] = "monkeybutler"。我在Browser對象中看不到變量來更改POST數據參數。

有什麼建議嗎? 這是我嘗試沒有成功:

# Select the first (index zero) form 
br.select_form(nr=0) 

# Let's search 
br.form['login_email'] = '[email protected]' 

#my_fields = br.form.fields.select 
#my_fields[0].login_password = "Password" 
#my_fields[1].login_password = "123qwerty" 
br.form['login_password']= ['Password','123qwerty'] 

br.submit() 

回答

1

如果你正面臨着相同的名稱,ID兩個字段等等,你必須使用一個小的解決辦法,altough它不是很乾淨

首先我定義一個簡單的HTML文件爲例子,因爲我不知道你使用的網址:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
     "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>foo</title> 
</head> 
<body> 

<h1>bar</h1> 

<form action="input_text.htm"> 
    <p>name:<br><input name="name" type="text" size="30" maxlength="30"></p> 
    <p>sec_name:<br><input name="sec_name" type="text" size="30" maxlength="40"></p> 
    <p>sec_name:<br><input name="sec_name" type="text" size="30" maxlength="40"></p> 
</form> 

</body> 
</html> 

之後我能值插入這些領域的快速和骯髒的使用這個Python代碼:

>>> import mechanize 
>>> browser = mechanize.Browser() 
>>> browser.open("file:///home/foo/index.html") 
<response_seek_wrapper at 0x229a7e8 whose wrapped ... 
>>> browser.select_form(nr=0) 
>>> name = 'foo' 
>>> for control in browser.form.controls: 
...  if control.name == 'sec_name': 
...    control.value = name 
...    name = 'bar' 
... 
>>> for control in browser.form.controls: 
...  print control 
... 
<TextControl(name=)> 
<TextControl(sec_name=foo)> 
<TextControl(sec_name=bar)> 
>>> 

這不是很好,但它的工作原理。希望有所幫助。

+0

是否適合你...? –

+0

它爲我工作:) – rslite