<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: Эмуляция браузера]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6274</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6274&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: Эмуляция браузера».]]></description>
		<lastBuildDate>Sun, 20 Nov 2011 11:05:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53706#p53706</link>
			<description><![CDATA[<p><strong>JSman</strong> У него нужный узел ищется по дом дереву, а не по голому HTML.<br />Я тут посмотрел вашь навигатор, ему не хватает нормального обработчика куков тот, что есть высылает всегда одинаковые куки на все URL, не обрабатывает флаги Expires, параметы secure и path, не эскейпит опасные символы.</p><p>А вот мой движок куков, но он работает только в HTA из за методов decodeURIComponent, encodeURI.<br /></p><div class="codebox"><pre><code>
var UND=&quot;undefined&quot;;
function isUnd(a)
{return typeof a ==UND}

var CookieEngine={
Cookies:{
/*
&quot;domain.com&quot;:{
		&quot;/path&quot;:
				{
					&quot;name&quot;:{value:&quot;&quot;,expires:&quot;&quot;,secure:&quot;&quot;}
				}
		}
*/
},

parseURL:function(url)//ret {d:&quot;domen.ru&quot;,p:&quot;/path&quot;}
	{
			//http://yandex.ru/dir/index.html
			//http(s?):\/\/([^\/:]+)(?::(\d+))?((?:(?:\/[\d\wа-я._-]*)*)\/)?
		if (/http(s?):\/\/([^\/?:]+)(?::(\d+))?((?:\/[\wа-я.=_-]*)*)/i.test(url))
		{
			return {s: (RegExp.$1 ? true : false), port:( RegExp.$3 ? RegExp.$3 : (RegExp.$1 ? 443 : 80) ) ,d: &quot;.&quot; + RegExp.$2, p: RegExp.$4 || &quot;/&quot;}
		}
		return null;
	},
DelCookie:function(name, path, domain)
	{
	 if (isUnd(name)  ||
		 isUnd(path)  ||
		 isUnd(domain) )
		 return null;
	 else delete this.Cookies[domain][path][name];
	 return this;
	},
GetCookie:function(name, path, domain)
	{
	 if (isUnd(name)  ||
		 isUnd(path)  ||
		 isUnd(domain)||
		 isUnd(this.Cookies[domain]) ||
		 isUnd(this.Cookies[domain][path]) ||
		 isUnd(this.Cookies[domain][path][name]) )
		 return &quot;&quot;;
		var coo=this.Cookies[domain][path][name];
	    var now=new Date();
		now.setMinutes(now.getMinutes()+now.getTimezoneOffset())
		if(now &gt; coo.expires &amp;&amp; coo.expires!=1) //устарела и не текущая сесия
		{
				this.DelCookie(name, path ,domain)
				return &quot;&quot;;
		}
		
		return coo.value;
	},
SetCookie:function(name, value, path, domain, expires, secure)
	{
		 if(isUnd(name)||
			isUnd(path) ||
			isUnd(domain))
			 return null;
		 if (typeof expires==&quot;string&quot;)
		 {
		   //Fri, 18-Mar-2011 20:32:35 GMT
		   //Mon, 01-Jan-1990 00:00:00 GMT
		   //Thu, 31-Dec-37 23:55:55 GM
			expires	= expires.replace(/-/g,&quot; &quot;).replace(/([a-zA-Z]{3} )(\d{1,3}) /i,
				function(c,b,a){
				  var L=a.length;	
				  return b + (L==3 ? &quot;2&quot; : (L==2 ? &quot;20&quot;:&quot;200&quot;)) + a + &quot; &quot;;
				} );//тут нада поработать над парсингом даты
			//log(&quot;@@expires: &quot;+expires)
			expires=new Date(expires)
		 }
		 else if( !(expires.getDate)) //не время
		 {
			 expires=1;//текущая сессия

		 }//else expires имеет тип дейт
		 
		 secure=secure ? true : false;
		 if (!this.Cookies[domain])
			this.Cookies[domain]={};
		 if (!this.Cookies[domain][path])
			this.Cookies[domain][path]={};

		 this.Cookies[domain][path][name]={&quot;value&quot;:value, &quot;expires&quot;: expires ,&quot;secure&quot;: secure}
		 return this;

	},
Clear:function( domen, path)
	{
		if (!isUnd(domen))
		{
			if (!isUnd(path))
			{
				delete this.Cookies[domen][path]
			}
			else{ delete this.Cookies[domen]}
		}
		else this.Cookies={};
		return this;
	},
parseSetCookie:function(url,s)//парсит одну сет куку
	{
		if (isUnd(s) || isUnd(url) || !(url=this.parseURL(url)))
		{
			return this;	
		}
		var coo={
				domain:	 url.d,
				path:	 url.p,
				secure:	 false,
				expires: 1 //1 - значит хранить до конца текущей сесии
				};//coo
		s=s.split(/;\s*/);
		var nv = s[0].split(/\s*=\s*/);
		var name = decodeURIComponent(nv[0]);
		var value = decodeURIComponent(nv[1]);
		for (var i=1;i&lt;s.length;i++)
		{
			nv=s[i].split(/\s*=\s*/)
			var cn=decodeURIComponent(nv[0].toLowerCase())
			coo[cn]= (typeof nv[1] != UND )? decodeURIComponent(nv[1]) : true;
		}//for
		//L(&quot;&lt;hr&gt;&lt;pre&gt; url = &quot;+Dumper(url)+&quot;&lt;\/pre&gt;&lt;pre&gt; coo=&quot;+Dumper(coo)+&quot;&lt;\/pre&gt;&quot;)
		//ToDo: добавить проверку  Что coo.domain == url.d или coo.domain есть поддомен url.d
		this.SetCookie(name, value, coo.path, coo.domain, coo.expires, coo.secure);//name, value, path, domain, expires, secure

		return this;
	},
toHttpHeader:function(u)//u = url //ret String
	{
		if (!isUnd(u))
		{
			u=this.parseURL(u);//ret {d:&quot;doem&quot;,p:&quot;path&quot;}
		}
		else return &quot;&quot;;//ошибка не задан урл
		var r=&quot;&quot;,v;
		//var d=this.Cookie[u.d];
        for (var d in this.Cookies)
        {  //0123456789
		   //www.aa.com
		   //    aa.com
		   //L(d)
		   var Li=u.d.lastIndexOf(d);
		   if (Li &gt; -1 &amp;&amp; Li+d.length==u.d.length)
		   {//L(d)
			for (var p in this.Cookies[d])
			 {//L(p)
				if (u.p.indexOf(p)==0)//есть совпадение пути
				{//L(p)
					for (var n in this.Cookies[d][p])
					{//L(n)
						if (v=this.GetCookie(n, p, d))
						{//L(v)
							r+= ( r.length &gt; 0 ? &quot;; &quot; : &quot;&quot; )+ n+&quot;=&quot;+encodeURI(v)
						}//if
					}//for
				}//if
			 }//for
		   }//if
        }//for
	     return r;
	}//httpheader


}//cookieman

function CookieManager()
{
	//return this;
}

CookieManager.prototype=CookieEngine;</code></pre></div><p>Пример<br /></p><div class="codebox"><pre><code>
 &lt;head&gt;
  &lt;title&gt;Тестим куки менеджер&lt;/title&gt;
	&lt;script type=&quot;text/javascript&quot;  charset=&quot;utf8&quot; src=&quot;CookieManager.js&quot;&gt;&lt;/script&gt;
 &lt;/head&gt;

 &lt;body&gt;
  &lt;h1&gt;Тестим куки менеджер&lt;/h1&gt;
  &lt;script type=&quot;text/javascript&quot;&gt;
    function L(t){document.write(&quot;&lt;pre&gt;&quot;+t+&quot;&lt;\/pre&gt;&quot;)}

	var url=&quot;https://ya.ru/doom/page.html?aasd=21321&quot;
	var coo=&quot;email=papa@ya.ru; domain=ya.ru; path=/doom/page.html; expires=Fri, 18-Mar-2012 20:32:35 GMT; &quot;
	var C=new CookieManager()
	L(&quot;[&quot;+C.toHttpHeader(url)+&quot;]&quot;)
	C.parseSetCookie(url,coo)

	L(&quot;[ &quot;+&quot;https://ya.ru/&quot; +&quot; : &quot;+C.toHttpHeader(&quot;https://ya.ru/&quot;)+&quot;]&quot;)
	L(&quot;[ &quot;+url +&quot; : &quot;+C.toHttpHeader(url)+&quot;]&quot;)
 
  &lt;/script&gt;
 &lt;/body&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Sun, 20 Nov 2011 11:05:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53706#p53706</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53435#p53435</link>
			<description><![CDATA[<p>Эта штука называется CSS Selectors. Функции использования селекторов есть в распространенных фреймворках типа base2.js, jquery, mootools. Можете погуглить, найдете Css Selectors от Dean Edwards. Если будут еще вопросы, создайте отдельную тему.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Fri, 11 Nov 2011 07:05:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53435#p53435</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53332#p53332</link>
			<description><![CDATA[<p>Может подскажет кто-нить простенький желательно на чистом js html2json скрипт с поддержкой CSS like запросов типа:</p><div class="codebox"><pre><code>div&gt;span.headers[0]</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Tue, 08 Nov 2011 10:41:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53332#p53332</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53144#p53144</link>
			<description><![CDATA[<p>OFF: <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Человеческий фактор. Всё бывает.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Thu, 03 Nov 2011 08:00:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53144#p53144</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53141#p53141</link>
			<description><![CDATA[<p><strong>Xameleon</strong>, да действительно ошибка в коде была у меня: накапливались заголовки Referer.<br />Из за этого второй запрос был вида:<br />Referer: A<br />Referer: B<br />то есть в одном запросе сразу два реферала.<br />Однако какое замечательное описание для этой ошибки:<br /></p><div class="quotebox"><blockquote><p>ошибка №-2147024713: Невозможно создать файл, так как он уже существует.</p></blockquote></div><p>Читаешь и сразу понимаешь где накосячил.</p><p>ИМХО: Не коректный запрос к серверу не должен приводить к сбою на стороне клиента.</p>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Thu, 03 Nov 2011 00:34:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53141#p53141</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53138#p53138</link>
			<description><![CDATA[<p>Пока <strong><span class="bbu">КОД</span></strong> не увижу - смысла обсуждения нет. ) Если не хотите выкладывать на форум - прошу в ICQ (252505765). А то это похоже на проведение операции больному на мозжечёк с перепиской по почте. ) Лечить надо на месте.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 02 Nov 2011 18:31:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53138#p53138</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53137#p53137</link>
			<description><![CDATA[<p>Экземпляры тоже не спасают. Всеравно вылазит таже ошибка.</p>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Wed, 02 Nov 2011 18:27:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53137#p53137</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53136#p53136</link>
			<description><![CDATA[<p>А стоит ли их отключать ? На мой взгляд лучше использовать отдельные экземпляры объектов. Но тут опять же без кода тяжело судить об удобстве конечной реализации.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 02 Nov 2011 18:22:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53136#p53136</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53135#p53135</link>
			<description><![CDATA[<p>Вполне возможно, у меня там свой движок кукисов. Как бы их отключить, что бы winhttprequest не писал их ни куда ?</p>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Wed, 02 Nov 2011 18:18:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53135#p53135</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53134#p53134</link>
			<description><![CDATA[<p><strong>2 mikser:</strong> А это как раз куки и кэш сохранялись в файл. ) Так что всё логично. ) Я не просто так прошу код показать. Ну не хотите как хотите ) Но тогда и не зачем на компонент ругаться. Любым инструментом нужно уметь пользоваться. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p><p>Рекомендую Вам обратить внимание на свойство <strong>Option</strong> у <strong>WinHttpRequest</strong> для тонких настроек. Оно решает <strong>ОЧЕНЬ</strong> многие проблемы. )<br /><a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa384108(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library … s.85).aspx</a></p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 02 Nov 2011 18:16:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53134#p53134</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53132#p53132</link>
			<description><![CDATA[<p>Баги там скрытые, код 100 раз перепроверял, все там правильно.<br />Писал регистратор, там есть запросы через web прокси по https протоколу.<br />Алгоритм там зациклен: сначала регится первый аккаунт, он как нистранно региструрется успешно. <br />Потом второй - по тому же алгоритму, и тут всплывает исключение - &quot;этот файл уже используется&quot;, какой файл, причем тут файл, у меня все в оперативке происходит, в скрипте не содержится функций которые что либо записывали на диск. <br />Try Catch не спасли, упростить код что бы выловить баг у меня не получилось.<br />Я так понял все запросы этот актив икс от майкрософта сохраняет где то в кеше, но по какой-то причине в случае использования прокси, с отключенными редиректами и только по протоколу https&nbsp; второй одинаковый запрос вызывает перезапись закешированого файла, но этот файл еще почемуто то, где то используется (и еще запросы должены быть асинхроными).</p><p>Почему я уверен что это баг Майкрософта, а не мой?<br />Просто мне стало интересно что это за чертовщина и я использовал запрещенный прием <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> .<br />Нагуглил альтернативный https activex модуль, но он разумеется оказался платным - 300$ - 500$ пришлось крякать <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> .<br />Переписал свое приложение под этот модуль, а&nbsp; winhttprequest вообще не использовал, грубо говоря просто заменил вызовы виндового модуля вызовами стороннего, и все стало работать как надо! В логике скрипта ошибок не было, к сожалению добавились другие глюки вызваные видимо кривым кряком... Полученный скрипт уже можно было использовать, но он работал не стабильно. <br />Вот теперь ищу альтернативные пути.</p>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Wed, 02 Nov 2011 17:50:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53132#p53132</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53131#p53131</link>
			<description><![CDATA[<p><strong>2 mikser:</strong> Хм, а позвольте поинтересоваться, что у Вас за &quot;баги&quot; возникают ? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> У меня всё прекрасно работает. И редиректы и HTTPS. И cookies. ) Может быть стоит разобраться более точно в проблеме ? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Хотелось бы взглянуть на код. Я например на этом объекте собрал целый сайт для скачки музыки из vkontakte.ru. А там и HTTPS и кукисы и редиректы ) Всё сразу. И всё работает. В личку или по ICQ готов даже ссылкой поделиться.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 02 Nov 2011 17:40:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53131#p53131</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=53128#p53128</link>
			<description><![CDATA[<p>Кароче все это конечно хорошо но, возникают либо проблемы с редиректами, либо с куками, либо с проксями, либо не возможно замутить асинхронный запрос, либо все упирается в баги https реализации от Майкрософт (из за этого отпадает WinHttp.WinHttpRequest) <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> .</p><p>Выхода&nbsp; я вижу 4:<br />1. реализовать свой собственный ActiveX для https запросов.<br />2. с помошью врапера подцепить какуюнить dll&#039;ку, в которой есть возможность использовать делать https запросы и поддержка асинхроного режима.<br />3. попробовать <a href="http://forum.script-coding.com/viewtopic.php?id=1139">использовать .NET</a>.<br />4. реализовать через сокеты, но тут будут трудности с HTTPS&#039;ом <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> .</p><p>PS если кто нить надоумит меня как сделать запрос через врапер, используя winapi - WinHTTP (не COM), буду очень признателен.</p>]]></description>
			<author><![CDATA[null@example.com (mikser)]]></author>
			<pubDate>Wed, 02 Nov 2011 17:05:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=53128#p53128</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=52775#p52775</link>
			<description><![CDATA[<p>Я не забросил тему. Пока нет времени, хотя на другие пустяковые дела время находится. Скажем так, временно отложил тему. Надо чтобы отлежалось в голове, потом приступлю новым экспериментам и, может быть, новым желчным высказываниям : )</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 21 Oct 2011 09:54:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=52775#p52775</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Эмуляция браузера]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=52773#p52773</link>
			<description><![CDATA[<p>OFF: <strong>to Rumata</strong>: Ну вот. И забросили тему. А я так надеялся поделиться опытом и подчерпнуть от Вас новых знаний. )</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Fri, 21 Oct 2011 08:55:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=52773#p52773</guid>
		</item>
	</channel>
</rss>
