Che Posted May 24, 2016 Report Posted May 24, 2016 Salut ! Scopul este sa emulezi la perfectie un browser in php, setezi cookie, user agent etc. Dar sa zicem ca vrei sa iei (nu neaparat sa le furi) niste informatii de pe un site care nu permite accesul botilor pe site. Pentru a preveni acest lucru, siturile respective detecteaza "Computer screen resolution" si "Browser window size" ca sa vada daca esti bot in php sau om in fata unui monitor. Va dau niste situri ca exemplu care detecteaza acest lucru: http://whatsmyuseragent.com/ si https://www.whatismybrowser.com/ Cum ai putea in php sa emulezi si acesti doi parametri ("Computer screen resolution" si "Browser window size" )ca sa nu se prinda siturile respective ca e vorba doar de un script si nu de un om ? (Daca nu se poate in php, atunci macar alt limbaj dar sa poata fi urcate pe un server scripturile, deci nu .exe sau .pl sau nici chiar .py.) Inca ceva, sa presupunem ca siturile respective de pe care vrei sa iei informatiile care te intereseaza, folosesc si detectare de pluginuri la browser (cum foloseste acest site: http://detectmybrowser.com/ ). Cum faci sa simulezi in php (sau chiar alt limbaj, dar php as prefera) ca tu esti browser si ca ai aceste pluginuri ? Multumesc mult ! 1 Quote
GarryOne Posted May 24, 2016 Report Posted May 24, 2016 (edited) S-ar putea sa te ajute pentru o parte din chestiile mentionate de tine.http://phantomjs.org/ Edited May 24, 2016 by GarryOne 3 Quote
SticKyWoX Posted May 24, 2016 Report Posted May 24, 2016 Am lucrat eu cu phantomjs pe windows si e foarte foarte incet, dar e ce-ti trebuie. Din pacate, nu il poti folosi pe un shared host. 1 Quote
middleftw Posted May 24, 2016 Report Posted May 24, 2016 (edited) http://docs.seleniumhq.org/download/ eu am lucrat cu selenium pe libraria php dezvoltata de facebook pentru un scrapper.Isi face treaba dar trebuie sa stai cu acel server java deschis. Edit : cam aici https://gist.github.com/aczietlow/7c4834f79a7afd920d8f si aici https://facebook.github.io/php-webdriver/ gasesti tot ce iti trebuie Edited May 24, 2016 by middleftw 1 Quote
Che Posted May 24, 2016 Author Report Posted May 24, 2016 @GarryOne @SticKyWoX @middleftw Eu am gasit pe net SimpleTest Scriptable Browser care merge si nu prea (sau cel putin eu nu prea am reusit). Si nu ma refer la get url & shit ci la interactiunea cu Web Forms. Spre exemplu, cum il faci ca sa dea un search in situl www.php.net folosind acel search box input din dreapta sus, de la pagina. Tot la fel pe wikipedia. Cum il faci sa caute ceva pe wikipedia folosind search-ul integrat din site ? Poate cineva sa-mi arate, va rog ? Eu am incercat, de exemplu, asa: <?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ require_once('browser.php'); $browser = new SimpleBrowser("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); $browser->get('http://ro1.php.net/manual/en/'); $browser->getFieldByName('pattern'); $browser->setFieldByName('pattern', 'sex'); $browser->submitFormById('topsearch'); echo $browser->getContent(); ?> Si nu merge. Si am mai incercat si in mai multe feluri, am cautat si pe Google, si tot nu am reusit. De doua zile ma tot chinui si nu reusesc. Cum ar trebui facut ? Multumesc mult ! Quote
Silviu Posted May 24, 2016 Report Posted May 24, 2016 27 minutes ago, Che said: @GarryOne @SticKyWoX @middleftw Eu am gasit pe net SimpleTest Scriptable Browser care merge si nu prea (sau cel putin eu nu prea am reusit). Si nu ma refer la get url & shit ci la interactiunea cu Web Forms. Spre exemplu, cum il faci ca sa dea un search in situl www.php.net folosind acel search box input din dreapta sus, de la pagina. Tot la fel pe wikipedia. Cum il faci sa caute ceva pe wikipedia folosind search-ul integrat din site ? Poate cineva sa-mi arate, va rog ? Eu am incercat, de exemplu, asa: <?php /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ require_once('browser.php'); $browser = new SimpleBrowser("Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); $browser->get('http://ro1.php.net/manual/en/'); $browser->getFieldByName('pattern'); $browser->setFieldByName('pattern', 'sex'); $browser->submitFormById('topsearch'); echo $browser->getContent(); ?> Si nu merge. Si am mai incercat si in mai multe feluri, am cautat si pe Google, si tot nu am reusit. De doua zile ma tot chinui si nu reusesc. Cum ar trebui facut ? Multumesc mult ! Păi ai selectori, folosește-i cu încredere. Quote
Che Posted May 24, 2016 Author Report Posted May 24, 2016 @Silviu Pai iti copiaza asta: #topsearch > span > input.search-query.tt-query Si nu stiu cum ai putea sa o folosesti. Da-mi tu un exemplu, te rog, sa vedem. Multumesc ! Quote
Maximus Posted May 24, 2016 Report Posted May 24, 2016 Am folosit http://phantomjs.org/ si sunt foarte multumit de el. Adica-l recomand. 1 Quote
mrreboot Posted May 25, 2016 Report Posted May 25, 2016 (edited) Am vazut ca nu vrei py, dar mie mi s-a parut super simplu si usor de folosit, in caz ca te razgandesti. Eu in python am folosit selenium + pyvirtualdisplay (poti emula si rezolutia dorita) Edited May 25, 2016 by kandykidd 3 Quote
Che Posted May 25, 2016 Author Report Posted May 25, 2016 8 hours ago, kandykidd said: Am vazut ca nu vrei py, dar mie mi s-a parut super simplu si usor de folosit, in caz ca te razgandesti. Eu in python am folosit selenium + pyvirtualdisplay (poti emula si rezolutia dorita) Pai unu la mana ca nu stiu Python deloc, cu php ma mai descurc ca seamana cu c++ OOP. Doi la mana, daca fac un script in Pyhton, imi da voie sa-l urc pe sever ? Eu stiam ca pe servere nu iti da voie sa urci perl si python dar si ruby si .exe si .dll sau .so (linux executables). Adica ma gandesc ca imi bat capul cu el si la urma nu pot sa-l folosesc. Quote
Active Members dancezar Posted May 25, 2016 Active Members Report Posted May 25, 2016 Chestia aia e facuta din javascript , practic daca un site ar vrea sa iti restrictioneze accesul la o resursa pe baza existentei acelor 2 parametri ar trebui ca javascript sa faca un http request sa trimita inapoi catre server rezolutia ecranului/browser-lui , interceptezi request-ul care trimite informatiile respective si il trimiti manual cu curl. O alta posibilitate este sa analizezi putin codul javascript al site-ului si sa vezi daca seteaza niste cookie-uri.Cu curl poti face aproape orice daca observi ce vrea serverul , cel putin pana acum nu am intalnit o situatie in care nu am putut folosi curl pentru ca nu detecteaza "un browser real". Poti sa ne arati cu ce site vrei sa lucrezi si nu iti iese cu curl? 4 Quote
SticKyWoX Posted May 25, 2016 Report Posted May 25, 2016 1 hour ago, danyweb09 said: Chestia aia e facuta din javascript , practic daca un site ar vrea sa iti restrictioneze accesul la o resursa pe baza existentei acelor 2 parametri ar trebui ca javascript sa faca un http request sa trimita inapoi catre server rezolutia ecranului/browser-lui , interceptezi request-ul care trimite informatiile respective si il trimiti manual cu curl. O alta posibilitate este sa analizezi putin codul javascript al site-ului si sa vezi daca seteaza niste cookie-uri.Cu curl poti face aproape orice daca observi ce vrea serverul , cel putin pana acum nu am intalnit o situatie in care nu am putut folosi curl pentru ca nu detecteaza "un browser real". Poti sa ne arati cu ce site vrei sa lucrezi si nu iti iese cu curl? Lucreaza cu site-uri care folosesc Incapsula 1 Quote
Active Members dancezar Posted May 25, 2016 Active Members Report Posted May 25, 2016 (edited) On 25.05.2016 at 11:39 AM, SticKyWoX said: Lucreaza cu site-uri care folosesc Incapsula De incapsula e simplu de trecut din ce am testat adineauri.Nu stiu daca am testat pe un site care trebuie dar cred ca la celasi Incapsula te referi . Prima vizita de pe ip-u nostru ne va da html-u asta @Che De aici faci un request si daca iti blocheaza accesul o sa vezi chestia asta chestia aia in Hex e jos de tot. Asa http://pastebin.com/Wsy85UbC @Che http://pastebin.com/TkJQMwuV Prima parte nu prea ne intereseaza a doua parte b="CEVA_IN_HEX" , decodat este: http://pastebin.com/4M08pVFE De aici porneste un request: xhr.open("GET", "/_Incapsula_Resource?SWHANEDL=8103315559244218759,14874298502430602693,13300863989648351994,197564", false); Ce trebuie sa prindem cu regex este 8103315559244218759,14874298502430602693,13300863989648351994,197564. Iar apoi faci un request catre /_Incapsula_Resource?SWHANEDL=CODUL_ALA , dupa acel request ar trebui sa ne afiseze pagina normala. Automatizat arata cam asa: http://pastebin.com/bzwtEuya Calea cu cookie trebuie sa fie accesibila. Edited May 29, 2016 by danyweb09 1 Quote
Che Posted May 26, 2016 Author Report Posted May 26, 2016 @danyweb09 In primul rand vreau sa-ti multumesc mult de tot pentru ajutor ! In al doilea rand, sper sa nu te superi, dar mai am niste "piedici" cu care ma confrunt in a incepe un proiect cu curl, fiindca sunt incepator in ale programarii, si de asta te rog mult, daca poti, sa ma ajuti cu urmatoarele chestii ca am incercat eu ceva, la unele, dar nu-mi iese deloc: Cu ajutorul unui script in curl si php sa te duci pe pagina ofociala wikipedia si in search-box-ul din dreapta sus sa scrii "PHP" (fara ghilimele) si apoi cand iti apare acea lista sa alegi pe cel pe care tin eu mouseul in imaginea de mai jos si sa dai click pe el: Sa dai o cautare pe Google dupa un cuvant oarecare, folosind scriptul care sa scrie in acel searchbox de la google si nu folosindu-te de url. Cum alegi o optiune anume dintr-un listbox html de la un site ? Cum bifezi un anume checkbox sau radio button de la un site ? Multumesc mult de tot pentru ajutor ! Quote
Active Members dancezar Posted May 26, 2016 Active Members Report Posted May 26, 2016 (edited) 1 . Foloseste-te de un tool care sa iti arate request-urile in timp real la ceea ce se incarca si misca in pagina, eu folosesc Live HTTP Headers pentru firefox, poti vedea request-uri sa le modifici si sa le retrimiti. In momentul cand tu apesi o tasta se va face un request ca sa iti scoata sugestiile din DB sau ceva: http://s33.postimg.org/mmvhdwg19/curl1.png Daca mergem catre link-ul respectiv vedem api-u care controleaza sugestiile in format JSON: http://s33.postimg.org/vu24k0izx/curl2.png Parsand json-ul vedem: http://s33.postimg.org/5yiwdomnj/curl3.png Pe ramura 3 se afla link-urile. http://pastebin.com/DZYVhU72 2. Nu prea am inteles ce vrei sa obtii dar presupun ca vrei sa scoti sugestiile caz in care procedezi la fel ca sus. 3. Te folosesti de Live HTTP Headers sau orice asemanator sa vezi ce request face in momentul cand tu alegi un checkbox / optiune si trimiti formularul , poate sa fie GET sau POST , functia curl care ti-am dat-o ca exemplu primeste al doilea parametru POST, poate iti este de folos. Edited May 26, 2016 by danyweb09 1 Quote
Che Posted May 26, 2016 Author Report Posted May 26, 2016 (edited) @danyweb09 Multumesc mult de tot ! LE: cum ai gasit acel request ? http://pastebin.com/4M08pVFE Si in ce era codat de zici ca l-ai decodat ? Codul ala HEX e acelasi peste tot la Incapsula sau trebuie sa-l cauti tu ? Multumesc mult ! @danyweb09 Scuze, revin cu aceeasi problema, de data asta exact la situl la care vreau eu sa iau datele: Vreau sa iau datele din acest tabel: https://www.whoscored.com/Teams/14 Dupa cum se vede are acolo doua cookie-uri cu incapsula. Am facut exact asa: <?php $myurl='https://www.whoscored.com/Teams/14'; //$myurl='https://ro.yahoo.com/?p=us'; //$myurl='http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10'; $Chrome = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"; $Firefox = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"; $InternetExplorer = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; $Opera = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43"; $agent=$Chrome; function url ($_url) { $mystringurl = str_replace(' ', '%20', $_url); return $mystringurl; } $header=array( 'User-Agent: '.$agent, 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: en-us,en;q=0.5', 'Accept-Encoding: text/html', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Keep-Alive: 115', 'Connection: keep-alive', ); // create a new cURL resource $ch = curl_init(); $post=""; // set URL and other appropriate options curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER,$header); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 35); curl_setopt($ch, CURLOPT_COOKIEJAR, './cookies/test.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, './cookies/test.txt'); //setam cookies: setcookie("_ga", "GA1.2.798162330.1459778182"); setcookie("crtg_rta"); setcookie("incap_ses_325_774904", "+mC5bv1myXdzszEUBqKCBIwAS1cAAAAAU+2k8DH1yqXnebgbl4WYBA=="); setcookie("visid_incap_774904", "DCmwXilORAewzgIg0kBC/YJyAlcAAAAAQUIPAAAAAADESAJUtsSx4SZjKyFtLH39"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_URL, url($myurl)); curl_setopt($ch, CURLOPT_VERBOSE, true); if($post!=""){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } // grab URL and pass it to the browser $curl_exec = curl_exec($ch); //return $curl_exec; ?> @danyweb09 Chestia este ca nu imi apare codul ala de aici http://pastebin.com/TkJQMwuV deloc. Nu mi se incarca pagina deloc si daca dau view source nu are nimic scris. Sa ma directioneaza la o pagina unde scrie ca nu exista acel url. Dar codul asta tot nu exista. Edited May 29, 2016 by Che Quote
Active Members dancezar Posted May 29, 2016 Active Members Report Posted May 29, 2016 On 26.05.2016 at 1:01 PM, Che said: @danyweb09 Multumesc mult de tot ! LE: cum ai gasit acel request ? http://pastebin.com/4M08pVFE Si in ce era codat de zici ca l-ai decodat ? Codul ala HEX e acelasi peste tot la Incapsula sau trebuie sa-l cauti tu ? Multumesc mult ! @danyweb09 Scuze, revin cu aceeasi problema, de data asta exact la situl la care vreau eu sa iau datele: Vreau sa iau datele din acest tabel: https://www.whoscored.com/Teams/14 Dupa cum se vede are acolo doua cookie-uri cu incapsula. Am facut exact asa: <?php $myurl='https://www.whoscored.com/Teams/14'; //$myurl='https://ro.yahoo.com/?p=us'; //$myurl='http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&y=2010&w=46%2008-11-10%2014-11-10'; $Chrome = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"; $Firefox = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0"; $InternetExplorer = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; $Opera = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36 OPR/37.0.2178.43"; $agent=$Chrome; function url ($_url) { $mystringurl = str_replace(' ', '%20', $_url); return $mystringurl; } $header=array( 'User-Agent: '.$agent, 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: en-us,en;q=0.5', 'Accept-Encoding: text/html', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'Keep-Alive: 115', 'Connection: keep-alive', ); // create a new cURL resource $ch = curl_init(); $post=""; // set URL and other appropriate options curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER,$header); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 35); curl_setopt($ch, CURLOPT_COOKIEJAR, './cookies/test.txt'); curl_setopt($ch, CURLOPT_COOKIEFILE, './cookies/test.txt'); //setam cookies: setcookie("_ga", "GA1.2.798162330.1459778182"); setcookie("crtg_rta"); setcookie("incap_ses_325_774904", "+mC5bv1myXdzszEUBqKCBIwAS1cAAAAAU+2k8DH1yqXnebgbl4WYBA=="); setcookie("visid_incap_774904", "DCmwXilORAewzgIg0kBC/YJyAlcAAAAAQUIPAAAAAADESAJUtsSx4SZjKyFtLH39"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_URL, url($myurl)); curl_setopt($ch, CURLOPT_VERBOSE, true); if($post!=""){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } // grab URL and pass it to the browser $curl_exec = curl_exec($ch); //return $curl_exec; ?> Am incercat asa http://pastebin.com/Wsy85UbC si a mers. Nu trebuie sa trimiti de fiecare data codul ala catre Incapsula ,odata ce ai trimis codul respectiv poti sa folosesti sissiunea din cookies/test.txt , COOKIE_JAR captureaza orice cookie trimis de server , COOKIE_FILE trimite cookie-urile stocate in fisier si pot fi refolosite, faza cu setcookie nu are rost iti seteza cookie-uri in browser-ul tau . Daca nu intelegi lasa-mi un id de skype ceva si iti explic mai multe. 1 Quote
Che Posted May 30, 2016 Author Report Posted May 30, 2016 19 hours ago, danyweb09 said: Am incercat asa http://pastebin.com/Wsy85UbC si a mers. Nu trebuie sa trimiti de fiecare data codul ala catre Incapsula ,odata ce ai trimis codul respectiv poti sa folosesti sissiunea din cookies/test.txt , COOKIE_JAR captureaza orice cookie trimis de server , COOKIE_FILE trimite cookie-urile stocate in fisier si pot fi refolosite, faza cu setcookie nu are rost iti seteza cookie-uri in browser-ul tau . Daca nu intelegi lasa-mi un id de skype ceva si iti explic mai multe. @danyweb09 Multumesc mult de tot ! Scuze ca te tot deranjez. Nu merge scriptul. Am incercat, la preg_match_all sa pun PREG_PATTERN_ORDER sau PREG_SET_ORDER , dar nu merge nici cu una. Nu afiseaza pagina deloc. Un pic de ajutor, te rog ? Si te rog sa ma scuzi ca te tot sacai. Multumesc mult ! Quote
EAdrian Posted May 30, 2016 Report Posted May 30, 2016 (edited) @Che poftim http://pastebin.com/SPfa43fX odată ce ai setat cookie-ul de la incapsula, regex-ul nu-ţi mai găseşte tokenul ăla şi automat îţi dă eroare Edited May 30, 2016 by EAdrian 1 Quote
Che Posted May 30, 2016 Author Report Posted May 30, 2016 1 hour ago, EAdrian said: @Che poftim http://pastebin.com/SPfa43fX odată ce ai setat cookie-ul de la incapsula, regex-ul nu-ţi mai găseşte tokenul ăla şi automat îţi dă eroare Acum se incarca pagina dar doar pe jumatate si exact tabeul de care am nevoie nu se incarca. L-am evidentiat in imagine. Si nu se mai termina de incarcat. Practic Dreamweaver intra intr-un fel de bucla din care nu mai poate iesi si cand dai sa-l atingi iti arata "Not responding" (am evidentiat in imagine). Un pic de ajutor, te rog ? Multumesc mult ! Quote
EAdrian Posted May 30, 2016 Report Posted May 30, 2016 2 hours ago, Che said: Acum se incarca pagina dar doar pe jumatate si exact tabeul de care am nevoie nu se incarca. L-am evidentiat in imagine. Si nu se mai termina de incarcat. Practic Dreamweaver intra intr-un fel de bucla din care nu mai poate iesi si cand dai sa-l atingi iti arata "Not responding" (am evidentiat in imagine). Un pic de ajutor, te rog ? Multumesc mult ! păi dacă te-ai fi uitat la request-uri ai fi văzut că tabelul ăla e încărcat dinamic http://prntscr.com/badenv ps: dreamweaver e o glumă de program.. 1 Quote
Che Posted May 31, 2016 Author Report Posted May 31, 2016 22 hours ago, EAdrian said: păi dacă te-ai fi uitat la request-uri ai fi văzut că tabelul ăla e încărcat dinamic http://prntscr.com/badenv ps: dreamweaver e o glumă de program.. Ce recomanzi sa folosesc in loc de Dreamweaver ? Eu pe asta l-am luat ca am auzit ca e cica cel mai bun si mai profi. Quote
Che Posted June 1, 2016 Author Report Posted June 1, 2016 10 hours ago, AlStar said: PhpStorm e la moda. Ohhh, sunt asa de incalcite programele jetbrains de-ti vine sa-ti smulgi parul din cap de nervi. Cu greu reusesti sa gasesti niste setari simple. Quote
QuoVadis Posted June 1, 2016 Report Posted June 1, 2016 22 hours ago, Che said: Ce recomanzi sa folosesc in loc de Dreamweaver ? Eu pe asta l-am luat ca am auzit ca e cica cel mai bun si mai profi. Arunca o geana pe https://c9.io/ Au varianta gratuita - https://c9.io/pricing/webide 2 Quote