Поисковик конфиденциальности

#php #symfony #web-crawler

#php #symfony #веб-сканер

Вопрос:

мне нужна ваша помощь, кто-нибудь может объяснить мне, почему мой код не находит конфиденциальность a-tag на сайте zoho.com ?

мой код хорошо находит ссылку «конфиденциальность» на других сайтах, но не на сайте zoho.com

Я использую сканер symfony: https://symfony.com/doc/current/components/dom_crawler.html

 // Imprint Check //

function findPrivacy($domain) {

 $ua = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13';
 $curl = curl_init($domain);
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
 curl_setopt($curl, CURLOPT_USERAGENT, $ua);
 $data = curl_exec($curl);

 $crawler = new Crawler($data);

 $nodeValues = $crawler->filter('a')->each(function ($node) {

     if(str_contains($node->attr('href'), 'privacy-police') || str_contains($node->attr('href'), 'privacy')) {
         
         return true;

     } else {
         
         return false;

     }

 });

 return $nodeValues;
 
}

  

если вы посмотрите исходный код из zoho.com , тогда вы увидите, что нижний колонтитул пуст. Но на сайте нижний колонтитул не пуст, если вы прокрутите вниз.

Как я могу теперь найти конфиденциальность этой ссылки?

Комментарии:

1. конфиденциальность-полиция? помимо нижнего колонтитула и большей части содержимого, js добавляет в этот файл (который php не будет отображать) zohowebstatic.com/sites/all/themes/zoho/scripts/zohocustom.js вместо этого используйте puppeteer для соскабливания

2. Symfony panther имеет тот же интерфейс, DomCrawler что и полноценный браузер, но запускает его через WebDriver, который может запускать javascript.

Ответ №1:

Ваш скрипт не может найти то, чего там нет. Если вы загружаете zoho.com откройте страницу в браузере и посмотрите на исходный код, вы заметите, что слово конфиденциальность даже не присутствует. Возможно, что нижний колонтитул, содержащий ссылку на политику конфиденциальности, загружается асинхронно, что PHP не может обработать.

РЕДАКТИРОВАТЬ: под асинхронной загрузкой я подразумеваю использование чего-то вроде AJAX, который является только на стороне клиента. Поскольку PHP работает только на стороне сервера, он не может выполнять операции, необходимые для загрузки нижнего колонтитула, содержащего ссылку на политику конфиденциальности.