2011-12-17 108 views
1

我需要一種方法通過PHP腳本來提取網頁上的所有表單信息。 所以我有:如何使用PHP從HTML中提取所有表單信息

$ url =「http://somewebpage.com/」;

我需要的信息是:
的網頁上的所有形式的列表,以及他們的選擇/ atributes像:
樣本輸出將如下所示:

Form1中:表單名稱: 「登錄」,行動 「的login.php」,方法: 「GET」

  1. 輸入類型: 「文本」,名稱: 「usrname」
  2. 輸入類型: 「密碼」,名稱: 「通」

窗體2:表名: 「Login2身份」,行動: 「login2.php」,方法: 「POST」

  1. 輸入類型: 「文本」,名稱: 「USR」
  2. 輸入類型: 「密碼」,名稱: 「PWD」

我用下面的方法把網頁的HTML內容到一個變量:


// cURL 
$browser_id = "some crazy browser"; 
$curl_handle = curl_init(); 
$options = array 
(
CURLOPT_URL=>$url, 
CURLOPT_HEADER=>true, 
CURLOPT_RETURNTRANSFER=>true, 
CURLOPT_FOLLOWLOCATION=>true, 
CURLOPT_USERAGENT=>$browser_id 
); 
curl_setopt_array($curl_handle,$options); 
$server_output = curl_exec($curl_handle); 
curl_close($curl_handle); 

然後,我用這個去除標題信息,只是保持HTML的東西,否則導致DOM總是給我錯誤。

$server_output2 = substr($server_output, stripos($server_output, "<html")); 

的尋找的形式,我使用DOM

$dom = new DomDocument; 
$dom->preserveWhiteSpace = FALSE; 
$dom->loadHTML($server_output2); 
$params = $dom->getElementsByTagName('form'); // Find Sections 
$k=0; 
foreach ($params as $param){ 
$forms[$k][0] = $params->item($k)->getAttribute('name'); 
$forms[$k][1] = $params->item($k)->getAttribute('action'); 
$forms[$k][2] = $params->item($k)->getAttribute('method'); 
$k++; 
} 

但我的問題是,我經常從DOM得到錯誤,有關未關閉的標籤,或其他信息。我不想獲取這些信息。我怎樣才能使它工作? 另外我目前的代碼,只輸出表單信息,而不是表單中的輸入,我也想知道。我該如何做這項工作?感謝您的幫助。 您可以查看我的項目的遠程攻擊媒介(這是我需要它)在http://sourceforge.net/projects/rav/files/ 或檢查出我的網站:http://tamasiweb.hu

+0

集CURLOPT_HEADER爲false。它不會添加任何標題。 – 2011-12-17 13:19:30

+0

哦真棒!謝謝!!! – 2011-12-17 13:21:18

回答

1

好,下載這個PHP LIB

http://sourceforge.net/projects/snoopy/

類的用法:

$uri = "http://anysite.com/form"; 

    $snoopy = new Snoopy; 

    if($snoopy->fetchform($uri)){ 
     $result = $snoopy->results; 
    } 
    echo $result; 

希望幫助