PHP Гутте. Кнопка выбора без поля значения

Это мой целевой веб-сайт: http://www.rapid7.com/db/, и я хочу проведите там поиск, скажем, строки «Symphony», чтобы проверить ее уязвимости.

Осматривая элементы формы ввода, я вижу, что ее имя «q», пока все хорошо, но кнопка не имеет значения, вместо этого кнопка, которая мне нужна для отправки моего запроса, имеет вид: <span id="run_search" class="vbsearchBtn"></span> без поля значения.

Мой код:

$client = new Client();

$crawler = $client->request('GET', 'http://www.rapid7.com/db/');
$form = $crawler->selectButton('????')->form();
$crawler = $client->submit($form, array('q' => 'Symphony'));
print $crawler->html();

Кто-нибудь знает, как это осуществить?


person aDoN    schedule 17.03.2015    source источник


Ответы (1)


Насколько я понимаю, ваша проблема заключается в том, чтобы получить элемент формы, зачем вам кнопка для этого? Вы можете запросить форму по идентификатору, который равен <form id="search_form" ...>. Вы также можете отправить t параметр, который является типом базы данных, которую вы хотите запросить (a для всех m для модулей v для уязвимостей). Ваш код должен быть примерно таким (вам должен быть установлен компонент CssSelector):

$client = new Client();

$crawler = $client->request('GET', 'http://www.rapid7.com/db/');
$form = $crawler->filter('#search_form')->first()->form();
$crawler = $client->submit($form, array('q' => 'Symphony', 't' => 'a'));
print $crawler->html();
person jfhs    schedule 25.03.2015
comment
Эй, большое спасибо за ваш ответ, но я получаю эту ошибку: PHP Catchable fatal error: Argument 1 passed to Symfony\Component\BrowserKit\Client::submit() must be an instance of Symfony\Component\DomCrawler\Form, instance of Symfony\Component\DomCrawler\Crawler given, called in /root/PHP/testrapid72.php on line 20 and defined in phar:///root/PHP/goutte.phar/vendor/symfony/browser-kit/Symfony/Component/Browse‌​rKit/Client.php on line 267 Я никогда не видел этот способ выбора формы, это имеет смысл, но не работает для меня, вы пробовали это сами¿? - person aDoN; 26.03.2015
comment
Спасибо большое, я сделал так: $client = new Client(); $crawler = $client->request('GET', 'http://www.rapid7.com/db/'); $form = $crawler->filterXPath('//div[@class="searchContainer"]/form')->form(); $crawler = $client->submit($form, array('q' => 'Drupal', 't' => 'a')); print $crawler->html(); - person aDoN; 26.03.2015