我有这段代码
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
我怎么能抓住这个?
答案 0 :(得分:2)
在文档中没有任何地方声明如果它与任何内容不匹配,它会抛出InvalidArgumentException
:
https://github.com/symfony/dom-crawler/blob/2.6/Crawler.php#L675
如果您尚未安装Symfony的CssSelector,则唯一可以抛出的异常是RuntimeException
。所以在你的情况下,永远不会抛出异常。
您正在寻找的是count()
方法(位于基础SplObjectStorage类上。因此您可以测试是否返回任何方法:
if ($totalpages->count() > 0)
您也可以这样做
if ($totalpages->count())