я пытался получить цену продукта и стоимость доставки
на aliexpress.com
Цена устанавливается и фиксируется и, следовательно, — легко …
Тем не менее, стоимость доставки загружается после того, как сайт определяет
из какой вы страны
Я просмотрел источник, и у него есть скрытое поле ввода, которое заполняется (возможно) после проверки моего местоположения или IP-адреса.
Как я могу использовать CURL, чтобы «обмануть» сайт и получить стоимость доставки в мою страну — иначе говоря, с помощью PHP?
CURL я получил:
$html = curl_download($producturl, $browserAgent);
$dom = new DOMDocument();
$dom->validateOnParse = true;
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
libxml_clear_errors();
// get and clean product price
$price = $dom->getElementById('product-price');
$price = $price->nodeValue;
$clnprice = currency_string_remover($price);
$clnprice = explode(' ', $clnprice);
$clnprice = array_filter(array_map('trim',$clnprice),'strlen');
$clnprice = array_values($clnprice)[0];
$currency = currency_string_extractor($price);
// get and clean shipping price
// >> this is empty until page determines location! PROBLEM
$shipprice = $dom->getElementById('shipping-cost');
$shipprice = $shipprice->nodeValue;
echo '<pre>SPRICE';
print_r($shipprice);
echo '</pre>';
$shipprice = explode('-', $shipprice);
$shipprice = $shipprice[0];
$shipprice = currency_string_remover($shipprice);
echo '<div id="sitename">aliexpress</div>';
echo '<div id="price">'.$clnprice.'</div>';
echo '<div id="shipprice">'.$shipprice.'</div>';
echo '<div id="currency">'.$currency.'</div>';
У кого-нибудь есть какие-либо идеи? Указатели? Помогите ссылками?
Я проверил сайт. Работает для нескольких языков и стран. С россией (мой случай) на странице товара основная цена включает стоимость доставки. Таким образом, этот элемент HTML остается пустым: <span id="shipping-cost"></span>
Кстати, это не в форме (в моем случае).
Если вы подозреваете, что он заполнен ajax (javascript), вам лучше проверить все файлы js на наличие shipping-cost
ключевое слово Я сделал это с Chrome dev-tools и в моем случае я не обнаружил его появления ни в одном js-файле (включая исходный html-файл). Так что скорее всего это не Javascript (AJAX) обновлен а скорее это поле изначально на сервере генерируется и может быть подан пустым.
Ваш браузер просматривает сайт из определенной страны, а сервер, на котором вы запускаете php-код (curl scraper), делает это из совершенно другой страны (IP). Таким образом, Aliexpress ответит другим содержанием страницы. Поэтому я рекомендую вам бесплатный прокси-сервис hola.org для изменения / поворота страны (IP) через прокси для отладки. Таким образом, вы можете проверить этот сайт с IP-адресами разных стран, чтобы увидеть это поле.
Возможно, вам придется проверить другое поле (продукт-инфо-доставка) чтобы увидеть условия доставки. http://joxi.ru/xAe8Wy1hGDgq2y
Если вы действительно хотите запросить веб-страницу с shipping-cost
Заполненный как в определенной стране (IP), то вам нужно использовать прокси-сервис для прокси ваших запросов curl.
Других решений пока нет …