PHP Fatal error: Call to a member function find() on a non-object - SimpleHmlDom

101
18 февраля 2022, 16:30

В цикле у меня перебираются страницы и загружаются

for($j=0;$j<100;$j++){
    $url_main_link=$url_main.'&p='.$j;          
    $dataLinkPage=$curl->createCurl($url_main_link,$params);
    $htmlOneAds = str_get_html($dataLinkPage);
    $getLinkads=$htmlOneAds->find('div[class=js-initial]');
}

Но почему-то, через какой-то промежуток циклов, вылетает ошибка. Подскажите, в какой стороне искать причину, т.к непонятно, почему она возникает, при условии, что если брать эту страницу отдельно из цикла, то никакой ошибки нет. Может памяти не хватает или конфиг подправить какой-то ?

Answer 1

Во-первых, у вас бесконечный цикл.

for($j=100;$j<100;$j++){

Сама ошибка означает что вы пытается применить поиск к неправильному объекту.

Подозреваю что раз вы бесконечно перебираете по номеру страницы, то в какой-то момент скрипт уходит за последнюю доступную страницу и CURL возвращает 404 ошибку или редирект или что-то подобное, а парсер такой ответ не может обработать и помещает не объект в $htmlOneAds, что в свою очередь приводит к ошибке.

Я бы рекомендовал в начале парсинга определять максимальное количество страниц и останавливать скрипт на последней странице.

Так же у вас вижу передачу некоторых параметров к url, что может вызывать ошибку.

Попробуйте добавить проверку $htmlOneAds по is_object, и там где true выполнять свой скрипт, а там где false - записывать в лог var_dump. Это поможет в отладке.

Примерно так:

for($j=0;$j<100;$j++){
    $url_main_link=$url_main.'&p='.$j;          
    $dataLinkPage=$curl->createCurl($url_main_link,$params);
    $htmlOneAds = str_get_html($dataLinkPage);
    if (is_object($htmlOneAds)){
        $getLinkads=$htmlOneAds->find('div[class=js-initial]');
    } else {
        $fp = fopen($url_main_link . '.txt', 'w');
        fwrite($fp, serialize($htmlOneAds));
        fclose($fp);
    } 
}
READ ALSO
Как получить статус &quot;в наличии&quot;?

Как получить статус "в наличии"?

Собственно сабж в заголовкеВывожу товары через каталог, надо этот статус вывести

87
Неверный sql запрос, как я понимаю

Неверный sql запрос, как я понимаю

Заношу новые данные пользователей в БД по их запросу

116
Почему данные заказа не отображаются?

Почему данные заказа не отображаются?

В личном кабинете woocommerce, при просмотре заказов по ссылке /wp-admin/editphp?post_type=shop_order есть один заказ, в котором отсутствуют данные покупателя, но статус...

109
Добавить класс к элементу

Добавить класс к элементу

помогите решить вопрос с списком есть список с вложенными ссылками

118