2013-04-05 1 views
3

를 형성하기 위해 액세스 http://de.selfhtml.org/javascript/objekte/anzeige/forms_method.htm크롤러 + 목구멍 예 :이 테스트를 위해 .... 나는 웹 사이트를 잡고, 다음 I 양식에 액세스하려고</p> <p>심포니 2.1 크롤러를 처리하기 위해 PHP를 목구멍 클라이언트를 사용하고

$url = 'http://de.selfhtml.org/javascript/objekte/anzeige/forms_method.htm'; 
$client = new Client($url); 

$request = $client->get(); 
$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYHOST, false); 
$request->getCurlOptions()->set(CURLOPT_SSL_VERIFYPEER, false); 
$response = $request->send(); 
$body = $response->getBody(true); 
$crawler = new Crawler($body); 
$filter = $crawler->selectButton('submit')->form(); 
var_dump($filter);die(); 

여기 형성하지만 난 예외를 얻을 :

현재 노드 목록이 비어 있습니다.

은 그래서 나는 가지, 그것은 화면을 긁어하고 웹 라이브러리가 이미 목구멍 (사용되는 도구 위에 구축 크롤링, Goutte를 사용해보십시오 형태를

답변

6

에 액세스하는 방법에 손실입니다 Symfony2 크롤러). 자세한 내용은 GitHub repo을 참조하십시오.

<?php 
$url = 'http://de.selfhtml.org/javascript/objekte/anzeige/forms_method.htm'; 
$client = new Client(); 
$guzzle = $client->getClient(); 
$guzzle->setConfig( 
    array(
     'curl.CURLOPT_SSL_VERIFYHOST' => false, 
     'curl.CURLOPT_SSL_VERIFYPEER' => false, 
    )); 
$client->setClient($guzzle); 
// ... 

UPDATE :

당신이 정말로 당신이 이런 식으로 할 수있는 설정에 CURL 옵션이 필요하면

코드는 Goutte

<?php 
use Goutte\Client; 

$url = 'http://de.selfhtml.org/javascript/objekte/anzeige/forms_method.htm'; 
$client = new Client(); 

$crawler = $client->request('GET', $url); 
$form = $crawler->selectButton('submit')->form(); 
$crawler = $client->submit($form, array(
    'username' => 'myuser', // assuming you are submitting a login form 
    'password' => '[email protected]' 
)); 
var_dump($crawler->count()); 
echo $crawler->html(); 
echo $crawler->text(); 

를 사용하여이 같을 것이다 DomCrawler를 사용할 때 종종 같은 오류가 발생합니다. 대부분의 경우 페이지에서 올바른 요소를 선택하지 않았거나 존재하지 않기 때문입니다. 사용하는 대신보십시오 :

$crawler->selectButton('submit')->form(); 

가 다음을 수행하십시오

$form = $crawler->filter('#signin_button')->form(); 

당신이 하나 '#signin_button'이있는 경우 ID로 요소를 얻기 위해 필터 방법을 사용하거나 또한 클래스 '.signin_button'하여 얻을 수있는 곳 . 필터 방법은 The CssSelector Component이 필요합니다.

또한 HTML (echo $crawler->html();)을 인쇄하고 실제로 올바른 페이지에 있는지 확인하여 양식을 디버깅하십시오.