2015-10-20 154 views
3

我有這個表單,我想填寫這個網站。需要提交的表單必須以第一種形式填寫輸入標籤。當您提交第一個表單時,它會生成另一個表格,並在表格中顯示您剛剛提交的內容,此表單還有一個提交按鈕,您必須單擊該按鈕才能確認您的操作。我會假設該網站使用JavaScript來刪除第一個表單,然後生成下一個,導致該網址在該轉換中不會更改。Python機械化 - 提交表單兩次

如何提交/確認下一張表格,即第一張表格提交時生成的表格?

用於填寫第一個表單的代碼。

import mechanize 

b = mechanize.Browser() 
b.open("http://www.website.com/a2b.php") 

b.select_form("snd") 
b.find_control("t1").value = '200' # number 1 
b.find_control("t2").value = '250' # number 2 
b.find_control("t3").value = '300' # number 3 

b.submit() 

第一種形式

<form method="POST" name="snd" action="a2b.php"> 
<input name="t1" value="" type="text"> 
<input name="t2" value="" type="text"> 
<input name="t3" value="" type="text"> 
<button type="submit" value="ok" name="s1"></button> 
</form> 

第二種形式

<form method="post" action="a2b.php"> 
<table> 
    Table showing the entered data, entered in previous form 
</table> 

<input name="timestamp" value="1445368847" type="hidden"> 
<input name="timestamp_checksum" value="JEN8mj" type="hidden"> 
<input name="ckey" value="20040" type="hidden"> 
<input name="id" value="39" type="hidden"> 
<input name="a" value="533374" type="hidden"> 
<input name="c" value="3" type="hidden"> 
<button type="submit" value="ok" name="s1" id="btn_ok"></button> 
</form> 
+0

您能否提供給我們真實的網址,以便我們的例子可以重複使用?謝謝。 – alecxe

+0

那麼它的瀏覽器叫做travian,你需要一個登錄。 – RasmusGP

+0

好的,但是您打開的機械化網址是什麼?謝謝。 – alecxe

回答

0

機械化不使用JavaScript以及播放,請嘗試使用Selenium Webdriver代替。它將充當瀏覽器,包括JS支持。您可以使用Waits等待第二種形式出現。

這裏是一個例子你怎麼可以填寫表單(我改編自this answer代碼):

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://www.website.com/a2b.php") 

def find_by_xpath(locator): 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.XPATH, locator)) 
    ) 

    return element 

class FirstFormPage(object): 
    def fill_form(self): 
    find_by_xpath('//input[@name="t1"]').send_keys('200') 
    find_by_xpath('//input[@name="t2"]').send_keys('250') 
    find_by_xpath('//input[@name="t3"]').send_keys('300') 

    return self # makes it so you can call .submit() after calling this function 

    def submit(self): 
    find_by_xpath('//input[@value = "ok"]').click() 

class SecondFormPage(object): 
    def fill_form(self): 
    find_by_xpath('//input[@name="timestamp"]').send_keys('1445368847') 
    find_by_xpath('//input[@name="timestamp_checksum"]').send_keys('JEN8mj') 
    find_by_xpath('//input[@name="ckey"]').send_keys('20040') 
    find_by_xpath('//input[@name="id"]').send_keys('39') 
    find_by_xpath('//input[@name="a"]').send_keys('533374') 
    find_by_xpath('//input[@name="c"]').send_keys('3') 

    return self # makes it so you can call .submit() after calling this function 

    def submit(self): 
    find_by_xpath('//input[@value = "ok"]').click() 

FirstFormPage().fill_form().submit() 
SecondFormPage().fill_form().submit() 
driver.quit() # closes the webbrowser 

適應這個您的需求!

+0

看起來像一個選項,但我不能完全明白它的工作。我需要在頁面上登錄,然後才能看到2個表格。第二種形式也只是一種確認形式,所以不需要改變任何值。 – RasmusGP

+0

還有[Selenium IDE](http://www.seleniumhq.org/projects/ide/),它允許您記錄瀏覽器操作,然後重現它,甚至在稍後編輯它,可能會更容易理解。 – dkol

+0

那麼這似乎在伎倆,非常感謝你的幫助, – RasmusGP