21

Re: Парсер телефонів OLX

Nachtjagdgeschwader написав:
VTrim написав:

Ось і весь "захист" :)

<?php

$url = 'https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html';

$cookie_path = $_SERVER['DOCUMENT_ROOT'].'/cookie.dat';

preg_match('|-ID(.*).html|', $url, $id);

$olx = curl_init($url);
curl_setopt($olx, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($olx, CURLOPT_RETURNTRANSFER, true);
curl_setopt($olx, CURLOPT_HEADER, 1);
curl_setopt($olx, CURLOPT_COOKIEFILE, $cookie_path);
curl_setopt($olx, CURLOPT_COOKIEJAR, $cookie_path);
$result = curl_exec($olx);
curl_close($olx);

preg_match("|phoneToken = '(.*)';|", $result, $token);

$olx_number = curl_init('https://www.olx.ua/ajax/misc/contact/phone/' . $id[1] . '/?pt=' . $token[1]);
    curl_setopt($olx_number, CURLOPT_HTTPHEADER, [
            'Host: www.olx.ua',
            'Accept: */*',
            'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate, br',
            'Connection: keep-alive',
            'X-Requested-With: XMLHttpRequest'
        ]);
        curl_setopt($olx_number, CURLOPT_REFERER, $url);
        curl_setopt($olx_number, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
        curl_setopt($olx_number, CURLOPT_COOKIEFILE, $cookie_path);
        curl_setopt($olx_number, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($olx_number, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($olx_number);
        curl_close($olx_number);
        
        $json = json_decode($result);
        echo $json->value;

Переклад мовою Python 3. Можливо, так комусь буде зручніше:

import re
import pycurl
from io import BytesIO
from bs4 import BeautifulSoup
import json

url="https://www.olx.ua/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html"
b = BytesIO()
c = pycurl.Curl()
cookie_path = 'cookie.dat'
ID = re.findall("-ID(.*?)\.html", url)[0]
c.setopt(pycurl.URL, url)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.HEADER, 1)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.COOKIEJAR, cookie_path)
c.perform()
c.close()
data = b.getvalue()
soup = BeautifulSoup(data, "html.parser")
phoneToken = re.findall("var phoneToken = '(.*?)'", soup.text)[0]
phone_url='https://www.olx.ua/ajax/misc/contact/phone/{0}/?pt={1}'.format(ID, phoneToken)
bb = BytesIO()
c = pycurl.Curl()
c.setopt(pycurl.URL, phone_url)
c.setopt(pycurl.HTTPHEADER, [
            'Host: www.olx.ua',
            'Accept: */*',
            'Accept-Language: uk,ru;q=0.8,en-US;q=0.5,en;q=0.3',
            'Accept-Encoding: gzip, deflate, br',
            'Connection: keep-alive',
            'X-Requested-With: XMLHttpRequest'
        ])
c.setopt(pycurl.WRITEFUNCTION, bb.write)
c.setopt(pycurl.REFERER, url)
c.setopt(pycurl.COOKIEFILE, cookie_path)
c.setopt(pycurl.SSL_VERIFYPEER, False)
c.setopt(pycurl.USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Mobile Safari/537.36')
c.perform()
c.close()
data = bb.getvalue()
try:
    json_data = json.loads(data)
    phoneNumber=json_data['value']
except:
    phoneNumber ='Перевірте номер за посиланням оголошення'
print(phoneNumber)

Перекладено на PHP OOP з GuzzleHttp.

composer require guzzlehttp/guzzle:~6.0

<?php
require_once(__DIR__ . '\vendor\autoload.php');

$url = '/obyavlenie/elektropila-makita-uc4051a-IDtMiOG.html';
$phoneUrl = '/ajax/misc/contact/phone/{ID}?pt={TOKEN}';

preg_match('|-ID(.*).html|', $url, $matchId);
$id = end($matchId);

$jar = new \GuzzleHttp\Cookie\CookieJar;
$client = new GuzzleHttp\Client([
    'base_uri' => 'https://www.olx.ua/',
    'cookies' => $jar,
    'headers' => [
        'user-agent' => 'Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405',
    ]
]);

$response = $client->request('GET', $url);
preg_match("|phoneToken = '(.*)';|", $response->getBody()->getContents(), $matchToken);
$token = end($matchToken);

$phoneUrl = str_replace(['{ID}', '{TOKEN}'], [$id, $token], $phoneUrl);
$response = $client->request('GET', $phoneUrl);

echo(json_decode($response->getBody()->getContents())->value);
?>
Подякували: 0xDADA11C7, ostap34PHP, free_net, /KIT\4

22

Re: Парсер телефонів OLX

Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((

23

Re: Парсер телефонів OLX

AndK написав:

Вітаю, шановні.
Спробував код на пітоні - повертає нулі. Вони знов щось змінили в захисті?
Хто в темі, допоможіть, будь ласка. Вже другий день б'юся з цим телехфоном((

Ключ - поле Referer. Якщо цікаво - є вже готовий парсер, за певну і доволі скромну винагороду можу поділитись.

Подякували: Caruso1

24

Re: Парсер телефонів OLX

і що ж то за скромна винагорода?

...

25

Re: Парсер телефонів OLX

/KIT\ написав:

і що ж то за скромна винагорода?

Якщо дійсно цікаво - напишіть у пм, все розкажу

26

Re: Парсер телефонів OLX

Декілька днів тому ОЛХ вніс зміни. Взяти телефони по вказаному вище коду не вдається. Хто має інформацію?

27 Востаннє редагувалося 221VOLT (28.01.2019 01:05:24)

Re: Парсер телефонів OLX

то це через вас я не можу з іншого компа ввійти в свій аккаунт на olx? :)

Все на світі, як вода, Світла радість і біда. Все тече і все біжить в нікуди,
Все на світі, як пісок, Залиши на ньому крок, Змиє все вода, було й так буде.

telegram: @TTaraskin

28

Re: Парсер телефонів OLX

Не виходить. Перевірив цей параметр. Він у файлі куків присутній, а сайт видає "Була зафіксована підозріла активність з вашої IP-адреси."
Підкажіть куди копати....

29

Re: Парсер телефонів OLX

Маю цікеве дослідження.
Якщо відкрити обяву в одній вкладці (№1) та відкрити таку саму обяву в другій вкладці (№2) браузера (важливо тільки відкрити обяву, та не натискати на кнопку телефона)
Потім перейти на вкладку №1 та натиснути мишею на телефон, то він не появиться, а сторінка перевантажиться. Якщо ще раз НЕ натискати, а перейти на вкладку №2 і там натиснути на телефон, то він також не відкриється, а просто перезавантажиться сторінка.
P.S. перевірив куки  _abck в обох вкладках - вони однакові. Проблема не в куках  _abck.

30

Re: Парсер телефонів OLX

Привіт, Всім, я тут новенький, але є думка, до проблема криється в phoneToken. Перевірив, що коли йде ajax запит до сервера з номерами - то токен вже відрізняється від того, який ми отримуємо зі сторінкою. Скоріш за все js його формує якось по-іншому.

31

Re: Парсер телефонів OLX

Підкину своє спостереження. phoneToken був і раніше. Вони включили в виконання  js скріпт, назва якого динамічно змінюється. Він досить сильно обфусцирований і генерує перевірочний код і передається у вигляді куків. Якщо він правильний то другий запит з phoneToken виконується без проблем

32

Re: Парсер телефонів OLX

розкажіть, навіщо вам парсити olx ?

Все на світі, як вода, Світла радість і біда. Все тече і все біжить в нікуди,
Все на світі, як пісок, Залиши на ньому крок, Змиє все вода, було й так буде.

telegram: @TTaraskin

33 Востаннє редагувалося DimIchFasT (17.02.2019 01:50:39)

Re: Парсер телефонів OLX

Мені потрібно знати номера людей, які надають замовлення в певних категоріях,та щоб вони були в мене в ТГ.

basil.str написав:

Підкину своє спостереження. phoneToken був і раніше. Вони включили в виконання  js скріпт, назва якого динамічно змінюється. Він досить сильно обфусцирований і генерує перевірочний код і передається у вигляді куків. Якщо він правильний то другий запит з phoneToken виконується без проблем

Відповім чесно, раніше мав готовий алгоритм, який працював, через це особливо не замислювався, як воно працює ( не можу порівняти особливості, як воно генерує куки зараз так тоді ), та зараз після зміни захисту вирішив особисто написати. Не підскажеш, яке саме поле генерує js?

34

Re: Парсер телефонів OLX

Тему періодично хтось та й апає.
Треба буде якось глянути що там)

=)
Подякували: DimIchFasT1

35

Re: Парсер телефонів OLX

можу помилятись, але те що маю
спочатку виконується https://www.olx.ua/resources/5f1c5a3423 … ec5e950c69
з парамертами json строки, що включають $url та параметр _abck з куків
Наприклад

{"sensor_data":"7a74G7m23Vrp0o5c9055101.4-1,2,-94,-100,Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36,uaend,12147,20030107,uk-UA,Gecko,3,0,0,0,381151,8870492,1920,1040,1920,1080,1000,938,1920,,cpen:0,i1:0,dm:0,cwen:0,non:1,opc:0,fc:0,sc:0,wrc:1,isc:0,vib:1,bat:1,x11:0,x12:1,8247,0.266386644133,774549435242.5,loc:-1,2,-94,-101,do_en,dm_en,t_en-1,2,-94,-105,0,-1,0,0,884,1452,0;0,-1,0,0,935,1874,0;1,0,0,0,854,1604,0;0,-1,0,0,2278,2206,0;1,0,0,0,1691,1936,0;-1,2,-94,-102,0,-1,0,0,884,1452,0;0,-1,1,0,935,1874,0;1,0,1,0,854,1604,0;0,-1,1,0,2278,2206,0;1,0,1,0,1691,1936,0;-1,2,-94,-108,0,1,602698,undefined,0,0,-1;1,2,602700,undefined,0,0,-1;2,1,602741,undefined,0,0,-1;3,2,602742,undefined,0,0,-1;4,1,602750,undefined,0,0,-1;5,2,602752,undefined,0,0,-1;6,1,602758,undefined,0,0,-1;7,2,602759,undefined,0,0,-1;-1,2,-94,-110,0,1,293,177,4;1,1,298,1663,288;2,1,560,1663,289;3,1,636,1668,285;4,1,776,1722,274;5,1,862,1919,224;6,1,13953,1864,514;7,1,13967,1723,531;8,1,13984,1590,552;9,1,14000,1463,571;10,1,14018,1357,587;11,1,14035,1256,607;12,1,14051,1159,633;13,1,14068,1054,661;14,1,14085,965,688;15,1,14101,875,709;16,1,14118,787,737;17,1,14136,756,752;18,1,14152,729,763;19,1,14169,705,776;20,1,14185,679,789;21,1,14201,657,800;22,1,14219,635,812;23,1,14236,619,821;24,1,14251,596,834;25,1,14271,575,848;26,1,14286,569,854;27,1,14301,561,866;28,1,14319,552,886;29,1,14336,549,900;30,1,14351,543,916;31,1,14369,538,929;32,1,133566,250,931;33,1,133582,275,886;34,1,133599,335,782;35,1,133616,414,648;36,1,133632,481,527;37,1,133649,537,437;38,1,133667,588,369;39,1,133682,631,317;40,1,133700,674,274;41,1,133716,707,245;42,1,133791,701,260;43,1,133801,684,285;44,1,133816,646,348;45,1,133833,612,433;46,1,133849,589,519;47,1,133866,564,610;48,1,133882,560,694;49,1,133899,567,761;50,1,133916,572,795;51,1,133932,575,818;52,1,133950,584,847;53,1,133966,585,859;54,1,133982,585,866;55,1,134000,585,872;56,1,134016,585,877;57,1,134032,582,881;58,1,134049,578,885;59,1,134066,574,888;60,1,134082,572,890;61,1,134099,571,892;62,1,134116,568,894;63,1,134132,565,897;64,1,134149,557,901;65,1,134166,544,914;66,1,134182,535,925;67,1,134199,526,934;68,1,134214,521,937;69,1,178103,211,937;70,1,178119,220,914;71,1,178133,229,888;72,1,178151,254,773;73,1,178166,261,743;74,1,178183,268,675;75,1,178200,267,630;76,1,178215,258,587;77,1,178233,251,558;78,1,178250,247,536;79,1,178265,247,516;80,1,178283,248,494;81,1,178301,255,472;82,1,178316,267,449;83,1,178332,283,427;84,1,178351,307,402;85,1,178367,391,340;86,1,178383,475,295;87,1,178400,557,246;88,1,178456,835,113;89,1,178466,872,96;90,1,178483,964,66;91,1,178499,1052,45;92,1,178516,1124,36;93,1,178534,1168,39;94,1,178550,1186,56;95,1,178566,1186,85;96,1,178583,1152,147;97,1,178600,1023,297;98,1,178616,912,437;99,1,178632,818,565;216,3,602773,1494,436,1438,3;217,4,602846,1494,436,1438,3;244,3,635820,874,418,-1;-1,2,-94,-117,-1,2,-94,-111,0,561,-1,-1,-1;1,571322,-1,-1,-1;2,598624,-1,-1,-1;-1,2,-94,-109,0,388,-1,-1,-1,-1,-1,-1,-1,-1,-1;1,571315,-1,-1,-1,-1,-1,-1,-1,-1,-1;2,598610,-1,-1,-1,-1,-1,-1,-1,-1,-1;-1,2,-94,-114,-1,2,-94,-103,3,210;3,211;3,238;3,238;2,277;2,277;2,277;2,278;2,2239;3,133090;2,134575;3,177931;2,179120;3,186811;2,188835;3,560434;2,562384;0,562385;3,571249;1,571251;2,574592;3,590883;2,590883;0,590883;3,598574;1,598575;2,607970;3,635674;-1,2,-94,-112,'.$url.'-1,2,-94,-115,NaN,12837758,0,1170510,1170316,0,NaN,635820,0,1549098870485,9,16571,8,245,2761,3,0,635823,19859392,1,'.$abck.',8228,641,68284281,30261689-1,2,-94,-106,1,4-1,2,-94,-119,20,20,20,20,40,40,40,20,20,20,20,20,20,300,-1,2,-94,-122,0,0,0,0,1,0,0-1,2,-94,-123,-1,2,-94,-70,-396189731;dis;,7,8;true;true;true;-120;true;24;24;true;false;-1-1,2,-94,-80,5004-1,2,-94,-116,44352487-1,2,-94,-118,210207-1,2,-94,-121,;4;27;0"}

формується запит, як наприклад
https://www.olx.ua/akam/10/pixel_16fdce3d
де pixel_[код], а параметри, що передаються POST вираховується внутнішньою функцією скрипта
наприклад

ap=true&bt=%7B%22charging%22%3Atrue%2C%22chargingTime%22%3A0%2C%22dischargingTime%22%3A%22Infinity%22%2C%22level%22%3A1%2C%22onchargingchange%22%3Anull%2C%22onchargingtimechange%22%3Anull%2C%22ondischargingtimechange%22%3Anull%2C%22onlevelchange%22%3Anull%7D&fonts=43%2C44%2C45%2C46%2C47%2C48%2C49%2C50%2C51%2C52%2C53%2C54%2C55%2C56%2C57%2C58%2C59%2C60%2C61%2C62%2C63%2C64%2C65%2C66%2C67%2C68%2C69&fh=a826ea847f6924d572ba3fffc361a10ddcfa25b6&timing=%7B%221%22%3A116%2C%222%22%3A283%2C%223%22%3A385%2C%224%22%3A487%2C%225%22%3A589%2C%226%22%3A691%2C%22profile%22%3A%7B%22bp%22%3A1%2C%22sr%22%3A0%2C%22dp%22%3A2%2C%22lt%22%3A0%2C%22ps%22%3A0%2C%22cv%22%3A34%2C%22fp%22%3A0%2C%22sp%22%3A0%2C%22br%22%3A0%2C%22ieps%22%3A0%2C%22av%22%3A0%2C%22z1%22%3A69%2C%22jsv%22%3A8%2C%22nav%22%3A1%2C%22z2%22%3A1%2C%22z3%22%3A1%2C%22z4%22%3A1%2C%22z5%22%3A1%2C%22z6%22%3A0%2C%22fonts%22%3A129%7D%2C%22main%22%3A67311%2C%22compute%22%3A116%2C%22send%22%3A821%7D&bp=1038350511%2C-1979380391%2C1738406762%2C749224105&sr=%7B%22inner%22%3A%5B1920%2C938%5D%2C%22outer%22%3A%5B1920%2C1040%5D%2C%22screen%22%3A%5B0%2C0%5D%2C%22pageOffset%22%3A%5B0%2C0%5D%2C%22avail%22%3A%5B1920%2C1040%5D%2C%22size%22%3A%5B1920%2C1080%5D%2C%22client%22%3A%5B1903%2C938%5D%2C%22colorDepth%22%3A24%2C%22pixelDepth%22%3A24%7D&dp=%7B%22XDomainRequest%22%3A0%2C%22createPopup%22%3A0%2C%22removeEventListener%22%3A1%2C%22globalStorage%22%3A0%2C%22openDatabase%22%3A1%2C%22indexedDB%22%3A1%2C%22attachEvent%22%3A0%2C%22ActiveXObject%22%3A0%2C%22dispatchEvent%22%3A1%2C%22addBehavior%22%3A0%2C%22addEventListener%22%3A1%2C%22detachEvent%22%3A0%2C%22fireEvent%22%3A0%2C%22MutationObserver%22%3A1%2C%22HTMLMenuItemElement%22%3A0%2C%22Int8Array%22%3A1%2C%22postMessage%22%3A1%2C%22querySelector%22%3A1%2C%22getElementsByClassName%22%3A1%2C%22images%22%3A1%2C%22compatMode%22%3A%22CSS1Compat%22%2C%22documentMode%22%3A0%2C%22all%22%3A1%2C%22now%22%3A1%2C%22contextMenu%22%3A0%7D&lt=1549369970163%2B2&ps=true%2Ctrue&cv=641b8dae39ae707f12dc40350ba69b9b598e80e2&fp=false&sp=false&br=Chrome&ieps=false&av=false&z=%7B%22a%22%3A385731688%2C%22b%22%3A1%2C%22c%22%3A0%7D&zh=&jsv=1.7&nav=%7B%22userAgent%22%3A%22Mozilla%2F5.0%20(Windows%20NT%206.1%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F71.0.3578.98%20Safari%2F537.36%22%2C%22appName%22%3A%22Netscape%22%2C%22appCodeName%22%3A%22Mozilla%22%2C%22appVersion%22%3A%225.0%20(Windows%20NT%206.1%3B%20Win64%3B%20x64)%20AppleWebKit%2F537.36%20(KHTML%2C%20like%20Gecko)%20Chrome%2F71.0.3578.98%20Safari%2F537.36%22%2C%22appMinorVersion%22%3A0%2C%22product%22%3A%22Gecko%22%2C%22productSub%22%3A%2220030107%22%2C%22vendor%22%3A%22Google%20Inc.%22%2C%22vendorSub%22%3A%22%22%2C%22buildID%22%3A0%2C%22platform%22%3A%22Win32%22%2C%22oscpu%22%3A0%2C%22hardwareConcurrency%22%3A4%2C%22language%22%3A%22uk-UA%22%2C%22languages%22%3A%5B%22uk-UA%22%2C%22uk%22%2C%22ru%22%2C%22en-US%22%2C%22en%22%2C%22pl%22%5D%2C%22systemLanguage%22%3A0%2C%22userLanguage%22%3A0%2C%22doNotTrack%22%3Anull%2C%22msDoNotTrack%22%3A0%2C%22cookieEnabled%22%3Atrue%2C%22geolocation%22%3A1%2C%22vibrate%22%3A1%2C%22maxTouchPoints%22%3A0%2C%22webdriver%22%3A0%2C%22plugins%22%3A%5B%22Chrome%20PDF%20Plugin%22%2C%22Chrome%20PDF%20Viewer%22%2C%22Native%20Client%22%5D%7D&t=ec97b46fb86b1d3b02ac6c318f40ae773535c50a&u=cbde43ffa3a45582879c26944bf42d81&fc=true

36

Re: Парсер телефонів OLX

Парсити номери треба для того, щоб звонити і говорити "Ви виграли 400 000".
Бази мейлів коштують дорого, а тут таке - база халявних телефонів, та ще й з іменами власників.
Я Вам зізнаюсь, що є такий метод зламу карток ПриватБанк. Телефонують і просять назвати дату народження.
А пароль ПриватБанку, такий:
SSXXX
де SS - 2 довільних символа
та
XXX - дата нарождення.
Такий пароль дають при реєстрації там, причому реєстрація проходить не в інтернеті, а в банку.
А Майже у всіх клієнтів ОЛХ є ПриватБанк...
Може бути поправка, проте, 4-ма символами є дата народження, а всього символів до 8...

Подякували: FakiNyan1

37

Re: Парсер телефонів OLX

Ukrvital написав:

Парсити номери треба для того, щоб звонити і говорити "Ви виграли 400 000".
Бази мейлів коштують дорого, а тут таке - база халявних телефонів, та ще й з іменами власників.
Я Вам зізнаюсь, що є такий метод зламу карток ПриватБанк. Телефонують і просять назвати дату народження.
А пароль ПриватБанку, такий:
SSXXX
де SS - 2 довільних символа
та
XXX - дата нарождення.
Такий пароль дають при реєстрації там, причому реєстрація проходить не в інтернеті, а в банку.
А Майже у всіх клієнтів ОЛХ є ПриватБанк...
Може бути поправка, проте, 4-ма символами є дата народження, а всього символів до 8...

то це такий пароль буде, якщо людина сама не змінить потім того пароля?

Говоріть українською! Живіть українською! Відчувайте українською!

38

Re: Парсер телефонів OLX

Так, такий буде.
Пенсіонери не змінюють.

Подякували: FakiNyan1

39

Re: Парсер телефонів OLX

Для злочинців не є проблемою в ручному режимі отримати номера телефонів
Все набагато простіше. Мова іде про створення локальних баз на базі багатьох сайтів по продажу (купівлі) авто та нерухомості. Як правило ті хто перепродає не є пенсіонерами,
А коли в автоматичному режимі спрацьовує тригер відповідності до запиту замовника, йому відсилаються координати.
Система автоматичного моніторингу.

40

Re: Парсер телефонів OLX

Ukrvital написав:

Телефонують і просять назвати дату народження.
А пароль ПриватБанку, такий:
SSXXX
де SS - 2 довільних символа
та
XXX - дата нарождення.
Такий пароль дають при реєстрації там, причому реєстрація проходить не в інтернеті, а в банку.

Пароль ПриватБанку???
Мені 3 рази телефонували "веселі хлопці та дівчата", але жодного разу не запитували про дату народження. Та й дату народження, не проблемно самому знайти + прізвище власника карти в Приват24 можна глянути.