Это довольно загадка для меня.
Я пытаюсь загрузить внешний HTML через cURL и получить элементы по имени тега (чтобы получить определенное свойство)
function getData($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_URL, $url);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$url = getData("https://example.com");
$dom = new DOMDocument();
$dom->loadHTML($url);
$aInputs = $dom->getElementsByTagName("input");
foreach($aInputs as $node) {
echo $node->getAttribute("name");
}
но скрипт выдает значения, отличные от ожидаемых. Когда я дам дамп переменной $url
и проверять эти входные данные через инспектор, он показывает правильные значения атрибутов, но после создания DOMDocument они ошибочны. Что может вызвать это?
РЕДАКТИРОВАТЬ: Как я обнаружил, что JS может быть вина. В браузере JS меняет некоторые вещи, которые не делает cURL. Есть ли обходной путь, чтобы CURL действовал как браузер?
Задача ещё не решена.
Других решений пока нет …