PhantomJs PHP загрузка из iframe

150
10 марта 2019, 07:30

Всем привет!
Я пытаюсь сделать автоматический парсер для группы сайтов, для этого использую phatomJs-PHP.
При попытки скачать данные из iframe-ов этих двух сайтов http://www.highlandgold.com/home/investors/regulatory-news/ и https://investors.inmarsat.com/regulatory-news/ с первым всё работает, а у второго все div элементы качаются без текста. Это при том, что оба сайта грузят данные для этих фреймов из одного источника. Качаю так:

$client = Client::getInstance();
$path = 'vendor\phantomjs\bin\phantomjs.exe';   
$client->getEngine()->setPath($path);
$client->isLazy();
$client->getEngine()->addOption('--load-images=false');
$client->getEngine()->addOption('--ignore-ssl-errors=true');
$request = $client->getMessageFactory()->createRequest($startUrl, 'GET');
$request->setTimeout(5000);
$response = $client->getMessageFactory()->createResponse();
$client->send($request, $response);
if($response->getStatus() === 200) {
    $cont = $response->getContent();
    file_put_contents($name.'.xml', $startUrl.$cont);
    $html = str_get_html($cont);
    return $html;
} else{
    echo '<br> ERROR JONNY: '.$response->getStatus();
}

Ошибок никаких не выводит, просто там где должен быть текст (таблица с ссылками и датами) - пусто. Пожалуйста объясните где я облажался.

Answer 1

Попробуйте вот так (обратите внимание, я убрал isLazy и добавил setDelay):

<?php
require __DIR__ . '/vendor/autoload.php';
use JonnyW\PhantomJs\Client;
$startUrl = 'https://tools.eurolandir.com/tools/pressreleases/?companycode=uk-deb&lang=en-gb';
$client = Client::getInstance();
$path = __DIR__ . '/vendor/bin/phantomjs';   
$client->getEngine()->setPath($path);
$client->getEngine()->addOption('--load-images=false');
$client->getEngine()->addOption('--ignore-ssl-errors=true');
$request = $client->getMessageFactory()->createRequest($startUrl, 'GET');
$request->setDelay(5);
$response = $client->getMessageFactory()->createResponse();
$client->send($request, $response);
if($response->getStatus() === 200) {
    echo $response->getContent();
} else{
    echo '<br> ERROR JONNY: '.$response->getStatus();
}
READ ALSO
Google и Яндекс заблокировали сайт

Google и Яндекс заблокировали сайт

У меня бедаСидел неделю разрабатывал сайт

148
Как передать данные между sockets?

Как передать данные между sockets?

Открыто 2 сокета на сервере по адресу 11

176
Преобразовать массив в массив для меню

Преобразовать массив в массив для меню

есть массив данных полученных по Rest API Пытаюсь из этих данных сделать меню, но для этого нужно его преобразовать с учетом вложенности (думаю...

162