Jump to content
Sign in to follow this  
Che

Cum simulezi chestiile astea in php ?

Recommended Posts

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 !

 

  • Upvote 1

Share this post


Link to post
Share on other sites

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.

  • Upvote 1

Share this post


Link to post
Share on other sites

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 by middleftw
  • Upvote 1

Share this post


Link to post
Share on other sites

@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 !

Share this post


Link to post
Share on other sites
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. 

p5UnKP0.png

Share this post


Link to post
Share on other sites

@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 !

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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?

  • Upvote 4

Share this post


Link to post
Share on other sites
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

  • Upvote 1

Share this post


Link to post
Share on other sites
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 by danyweb09
  • Upvote 1

Share this post


Link to post
Share on other sites

@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:

  1. 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:10pa6av.png
  2. 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.
  3. 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 !

Share this post


Link to post
Share on other sites

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 by danyweb09
  • Upvote 1

Share this post


Link to post
Share on other sites

@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

b82QNZF.png

 

Dupa cum se vede are acolo doua cookie-uri cu incapsula.

Am facut exact asa:

 

	&lt;?php
	
	$myurl='https://www.whoscored.com/Teams/14';
	//$myurl='https://ro.yahoo.com/?p=us';
	//$myurl='http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&amp;y=2010&amp;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;
	?&gt;
	

 

 

@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 by Che

Share this post


Link to post
Share on other sites
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

b82QNZF.png

 

Dupa cum se vede are acolo doua cookie-uri cu incapsula.

Am facut exact asa:

 


	&lt;?php
	
	$myurl='https://www.whoscored.com/Teams/14';
	//$myurl='https://ro.yahoo.com/?p=us';
	//$myurl='http://mediaforest.ro/weeklycharts/viewchart.aspx?r=WeeklyChartRadioLocal&amp;y=2010&amp;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;
	?&gt;
	

 

 

 

 

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.

  • Upvote 1

Share this post


Link to post
Share on other sites
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.

bRnNbo8.png

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 !

Share this post


Link to post
Share on other sites
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

 

wLvk8nH.png

 

 

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 !

Share this post


Link to post
Share on other sites
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.. :lol:

  • Upvote 1

Share this post


Link to post
Share on other sites
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.. :lol:

 

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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...