Как повторно отправить запрос на тайм-аут ресурса в PhantomJS?

У меня есть PHP-скрипт, который очищает сеть и вставляет очищенные данные в базу данных с помощью PhantomJS.
В настоящее время по истечении времени ожидания ресурса в PhantomJS я отменяю весь запрос страницы и снова запрашиваю всю страницу через PHP.
Вот мой код:

page.settings.resourceTimeout = 5000; // 5 seconds
page.onResourceTimeout = function(e) {
console.log(e.errorCode);   // it'll probably be 408
console.log(e.errorString); // it'll probably be 'Network timeout on resource'
console.log(e.url);         // the url whose request timed out
phantom.exit(1);
};

Я хочу только повторно отправить запрос ресурсу, который истек, и не запрашивать всю страницу заново.
Это возможно?

2

Решение

Вы можете повторно отправить запрос (GET), но это не сильно вам поможет, потому что причина запроса другая.

Запросы ресурсов произойдет автоматически, когда, например, ссылка на файл JavaScript в <script> тег. Вы можете скачать его с PhantomJS через XHR, но вполне вероятно, что другие скрипты, которые от него зависят, уже пытались запустить и не смогли. Вы должны были бы повторно запустить их все снова. Это действительно утомительно.
Другие ресурсы, такие как файлы CSS или изображения, не зависят от времени и могут быть загружены повторно. Но когда вы это сделаете, вы должны вставить их в нужное место. Давайте возьмем файл CSS для примера.

  1. Вы можете обнаружить, что это был ресурс CSS из заголовков запросов или из URL,
  2. проверьте DOM, что ресурс действительно ссылается,
  3. скопировать узел DOM со всеми его атрибутами (и innerHTML) в новый узел DOM,
  4. удалите старую и вставьте новую. Ничего не изменилось, но это должно было побудить браузер снова загрузить ресурс. Все это должно быть сделано в контексте страницы в page.evaluate Перезвоните.

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

Вы можете запустить PhantomJS с --disk-cache=true вариант, так что для повторного запуска запроса страницы требуется меньше времени.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]