#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 работает только на стороне сервера, он не может выполнять операции, необходимые для загрузки нижнего колонтитула, содержащего ссылку на политику конфиденциальности.