2016-08-04 116 views
0

有一個查詢海量數據庫的PHP表單。表單的URL是https://db.slickbox.net/venues.php。表單發送後最多需要10分鐘才能返回結果,並將結果內聯返回到同一頁面。我已經嘗試過使用Requests,URLLib2,LXML和Selenium,但我無法想出使用任何這些庫的解決方案。有人知道提交此表單後檢索結果的頁面源的方法嗎?如何提交不使用Python立即返回結果的PHP表單?

如果您知道這個解決方案,爲了測試的目的,只需填寫名稱字段(「vname」)和任何想到的商店/加油站的名稱即可。最終,我還需要使用「checked」屬性來設置複選框,但這是我工作後的後續目標。謝謝!

+0

您是否嘗試更改請求的超時時間? – Dekel

+0

無論如何,在請求庫的情況下,這不是超時工作方式。這會設置返回異常之前等待的最長時間。問題是運行代碼時,這些庫中的任何一個都會立即返回結果,而不應該這樣做。 – DaJoNel

回答

0

我通常依靠Curl來做這些事情。 而不是用按鈕發送表單來檢索源,直接調用響應頁面(給它你的請求)。因爲我在PHP下工作,所以這很容易。用python,你需要pycURL來管理同樣的事情。

所以唯一要做的就是調用venues.php,使用POST method with Curl引發的良好參數值。

這樣,您將需要準備您的請求(國家代碼,貓的名稱),但您不需要選中複選框,也不需要在瀏覽器中加載網站頁面。

set_ini(max_execution_time,1200) // wait 20 minutes before quitting 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "https://db.slickbox.net/venues.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

// prepare arguments for the form 
$data = array('adlock ' => 1, 'age' => 0,'country' => 145,'imgcnt'=>0, 'lock'=>0,'regex'=>1,'submit'=>'Search','vname'=>'test'); 

//add arguments to our request 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
//launch request 
if(! $result = curl_exec($ch)) 
{ 
    trigger_error(curl_error($ch)); 
} 
echo $result; 
+0

我很好,只是使用PHP,因爲我可以將它構建到我打算使用的Web界面中。儘管如此,我對Curl並不熟悉,那麼你能提供一個更具體的代碼,我可以使用它嗎?如果沒有,那很好,明天我可以做更多的研究。捲曲會不會在乎它可能需要等待10分鐘才能做出迴應?謝謝你的提示! – DaJoNel

+0

添加了未經測試的示例代碼。關於時間限制,curl可能會受到php最大執行時間的限制。我們只能用ini_set函數對它進行更改。 – technico

+0

工作;非常感謝你!我一直很欣賞PHP,這進一步鞏固了它是多麼的棒。我也一定會考慮PycURL(使用Python更容易實現自動化),但這是一個很好的開始! – DaJoNel

0

ghost怎麼樣?

from ghost import Ghost 
ghost = Ghost() 

with ghost.start() as session: 
    page, extra_resources = session.open("https://db.slickbox.net/venues.php", wait_onload_event=True) 
    ghost.set_field_value("input[name=vname]", "....") 
    # Any other values 
    page.fire_on('form', 'submit') 
    page, resources = ghost.wait_for_page_loaded() 

    content = session.content # or page.content I forgot which 

當你可以使用美麗的方式來解析HTML或Ghost可能有一些基本的工具來做到這一點。

相關問題