У меня есть этот код
try{
$totalpages=$crawler->filter('.button-see-more');
$totalpages=$totalpages->extract(array('data-total-pages'))[0];
if($totalpages>0)
for($i=1;$i<=$totalpages;$i++)
{
$client->request('GET', 'http://www.daraz.pk/catalog/getproducts/?pathInfo=phones%2Fqmobile&page='.$i.'&YII_CSRF_TOKEN='.$CSRF, array(), array(), array(
'HTTP_X-Requested-With' => 'XMLHttpRequest',
));
echo $i.'th page: '.$client->getResponse()->getContent()."\r\n";
}}
catch (InvalidArgumentException $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
Согласно страницам документа
$totalpages=$crawler->filter('.button-see-more');
когда фильтр не совпадает с чем-либо, он должен генерировать исключение InvalidArgumentException, которое не генерируется, а в консоли, которую я получаю
Примечание PHP: Неопределенное смещение: 0 в
Как я могу поймать это?
Нигде в документации не указано, что InvalidArgumentException
если это ничего не соответствует:
https://github.com/symfony/dom-crawler/blob/2.6/Crawler.php#L675
Единственное исключение, которое может быть брошено, это RuntimeException
если вы не установили Symfony’s CssSelector. Так что в вашем случае исключение никогда не будет выброшено.
Вместо этого вы ищете count()
метод (который находится на базе SplObjectStorage учебный класс. Таким образом, вы можете проверить, если таковые возвращаются с:
if ($totalpages->count() > 0)
Вы также можете просто сделать
if ($totalpages->count())
Других решений пока нет …