我想通過機械化在多個網站中提交表格。通常我不能完全知道表單名稱或表單ID,但我知道要提交的輸入名稱。在迭代所有表格時選擇正確的表格
假設有一個網站裏面有幾個表單。我的代碼應該檢查所有表單,如果其中一個具有名爲「email」的輸入值,它將提交該表單。如果有多個表單,它會將它們全部提交。
我測試的網站有兩種形式。其中一個是登錄表單,另一個是訂閱表單。他們都有「電子郵件」輸入值。所以我的代碼應該提交這兩個表單。
我想這個代碼塊來實現它:
for forms in br.forms():
if not forms.find_control(name="email"):
continue
br.select_form(nr=0)
br.form["email"] = email
br.submit()
print "Success: ", link
此代碼打印兩種成功的消息,但它不是訂閱。下面的代碼工作在遞交認購表格,因爲我設置窗體名稱:
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.6')]
br.open("http://example.com")
br.select_form("subscribe")
br.form["email"] = email
br.submit()
那麼,什麼是錯的第一碼?我怎樣才能選擇這兩種形式並提交價值?可能問題出在那個表單選擇部分:
br.select_form(nr=0)
編輯:我用Wireshark檢查了它的POST請求。它似乎填補了兩次的第一種形式。當我更改nr=0
與nr=1
它的作品,因爲正確的形式是第二種形式。
你應該說明你正在使用機械化。你的問題的前幾個段落是令人困惑的,因爲你所描述的內容中有99%是在網絡瀏覽器的環境中。 – borfast