Яндекс Метрика
-
Загрузки страниц, выполненные через BAS, даже с реферером, определяются как прямые заходы в статистике Яндекс Метрики. Сравнивал исходящие запросы от настоящего браузера и BAS, они практически одинаковые (различие только в порядке заголовков и User-Agent), значит, проблема не с моей стороны. Но запросы, посылаемые скриптом Яндекс Метрики для сбора статистики, отличаются, т.е. Яндекс как-то отличает браузер BAS от настоящего. С чем это может быть связано?
В запросе через BAS отсылается пост-запрос с телом запроса none=
Из браузера отсылается такой же запрос, но без none=
Если есть время, был бы очень благодарен, если бы вы протестировали этот момент на любом сайте с яндекс статистикой, запрос уходит на адрес mc.yandex.ru/watch/*
Если нет сайта, то на моем стоит статистика http://infinite-space.ru/
Скорее всего, это происходит из-за каких-то отключенных модулей в браузере, например тот же Flash Player.Так же заметил, что отсылается информация о браузере. Из BAS отсылается такое инфо
s:1600x900x0:sk:1:fpr:124490931101:cn:1:w:1583x900:z:300:i:20161206143750:et:1481017070:en:utf-8:v:738:c:1:la:ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3:ntf:1:pv:1:ls:831579626855:rqn:1:rn:154678927:hid:916747943:ds:0,0,433,42,64,0,,1691,24,,,,2248:fp:2287:rqnl:1:st:1481017070:u:148101707042907158:t:Infinite Space
Из обычного браузера такое:
ilt:0JIg0LrQvtC90YLQsNC60YLQtQ==:j:1:s:1366x768x24:sk:1:adb:2:f:23.0.0.207:fpr:81992510001:cn:1:w:1350x673:z:300:i:20161206143958:et:1481017199:en:utf-8:v:738:c:1:la:ru-ru:pv:1:ls:263866170669:rqn:25:rn:112216523:hid:777995781:ds:0,0,0,4,0,0,,4644,24,,,,5310:fp:3056:rqnl:1:st:1481017199:u:1477635069609717366:t:Infinite Space
Первое, что заметил - в данных, отправленных из BAS, нет глубины цвета (идет после разрешения после
s:
). Может, и еще чего-то не хватает, но разобраться с обфусцированными данными трудно. Возможно ли сделать полную эмуляцию браузера, или хотя бы просто сделать возможность как-то включать ее, когда нужно?
-
Возможно ли сделать полную эмуляцию браузера, или хотя бы просто сделать возможность как-то включать ее, когда нужно?
Обижаете, BAS и так эмулирует браузер.
Все гораздо проще, дело в document.referrer
Вот фикс.
И не забывайте, чтобы посещение зачлось нужно подвигать мышкой
-
@blackhacker Если хотите, можете оформить и выложить скрипт в магазин, тут многие интересовались метрикой.
-
@support Спасибо, скоро выложу) Придется вырезать часть кода из моего скрипта, у меня гораздо больше функций, чем просто прогулка по сайту. Но я не знаю, какую примерно выставить цену, чтобы и не завышать сильно, и не за бесценок выставлять. Что-то нужно знать для фикса (устанавливать document.referer), или мой текущий скрипт будет работать? Насколько скрипт будет защищен? У меня все функции скрипта находятся в секции "выполнить код", его любой желающий сможет выложить потом. Я скачал скрипт SiteVisitor из магазина, и без труда получил его исходники.
И еще появился вопрос. Во время выполнения иногда вываливается ошибка
1 - TypeError: Result of expression '_result().split' [undefined] is not a function. Номер строки:3 Во время выполнения скрипта_on_error стоит, игнорирование ошибок тоже включено. Но скрипт все равно завершается.
-
Но я не знаю, какую примерно выставить цену, чтобы и не завышать сильно, и не за бесценок выставлять.
Я тоже не знаю, слышал, что есть такие сервисы, значит должен быть и спрос. Ну и такой скрипт не будет требовать постоянных доработок.
Что-то нужно знать для фикса (устанавливать document.referer), или мой текущий скрипт будет работать?
Текущий скрипт будет работать. Такой код:
Установить referer Зайти на сайт Подвигать мышью, понажимать на ссылки
до фикса давал в метрике прямой переход, после фикса дает переход по ссылке, той, что в реферере.
Вот что выдало, когда установил в реф ag.ru
http://prnt.sc/dg62gwНасколько скрипт будет защищен? У меня все функции скрипта находятся в секции "выполнить код", его любой желающий сможет выложить потом. Я скачал скрипт SiteVisitor из магазина, и без труда получил его исходники.
Должен быть защищен, скрипт шифруется/расшифровывается по мере выполнения, такого быть не должно. Если не секрет, как у вас это получилось?
1 - TypeError: Result of expression '_result().split' [undefined] is not a function. Номер строки:3 Во время выполнения скрипта
_on_error не спасает от js ошибок, а тут _result() не установлен в функции. Кстати, это тоже можно исправить, но пока можно добавить такой код
if(!_result()) { // как-то отреагировать, возможно завершить поток. }
-
@support said in Яндекс Метрика:
Должен быть защищен, скрипт шифруется/расшифровывается по мере выполнения, такого быть не должно. Если не секрет, как у вас это получилось?
так он вроде про бесплатный скрипт, а он ведь не шифруется ?
-
@out если с магазина - должен шифроваться
-
@out Бесплатный не значит открытый. Например, может быть такой вариант. Разраб делает 2 скрипта. Один в один поток - фри, второй без ограничений, и если первый утечет, то второй восстановить будет легко.
-
@support said in Яндекс Метрика:
Должен быть защищен, скрипт шифруется/расшифровывается по мере выполнения, такого быть не должно.
Возможно, в новой версии уже так сделано, но перед обновлением BAS скачал SiteVisitor из магазина, установил, запустил, в подпапкe Engine вроде нашел исходный проект. Я не знал, что исходник уже выкладывали на форуме, думал, там другой скрипт, поэтому хотел посмотреть исходник, я тогда как раз задавал вопрос по автоматизации посещений
@support said in Яндекс Метрика:
_on_error не спасает от js ошибок, а тут _result() не установлен в функции.
А разве функция не должна генерировать ошибку, например random_point, которая перед этим вызывается, если она не была успешно завершена и не смогла установить _result()?
вот часть кода, где ошибка:
_if(el_exists, function () { BE.callbacks.element.focus()! BE.callbacks.element.random_point()! BE.log('Move ' + parseInt(_result().split(",")[0]) + ' ' + parseInt(_result().split(",")[1])); move(parseInt(_result().split(",")[0]), parseInt(_result().split(",")[1]))!
Ошибка может быть через пару минут, а может через пару часов. Добавлю проверку, но все равно интересно, почему _result() не устанавливается, и при этом не генерируется ошибка в random_point
Решил протестировать скрипт, увеличил количество потоков до 30, BAS стал падать. Уверен, что из-за какого-то кода, но опять же, почему? Запускал и 200 потоков для теста, хоть и с тормозами, но все запустилось.
-
Возможно, в новой версии уже так сделано, но перед обновлением BAS скачал SiteVisitor из магазина, установил, запустил, в подпапкe Engine вроде нашел исходный проект.
В папке engine будет файл с таким содержанием
<Remote ScriptName="sitevisitor" Version="last" Server="https://bablosoft.com/" Username="" Password="" Free="true" Mode="1"/>
На диске скрипт не хранится даже в зашифрованном состоянии. Скрипт приходит каждый раз от сервера и только в зашифрованном виде. Этим достигается дополнительная защита и автообновление.
Я не знал, что исходник уже выкладывали на форуме
Этот скрипт есть и на форуме и в примерах для софта, но с магазина его не должно быть возможным получить.
Ошибка может быть через пару минут, а может через пару часов. Добавлю проверку, но все равно интересно, почему _result() не устанавливается, и при этом не генерируется ошибка в random_point
Не знаю, по коду или должен вывалиться таймаут или вернуться два числа через запятую.
Решил протестировать скрипт, увеличил количество потоков до 30, BAS стал падать. Уверен, что из-за какого-то кода, но опять же, почему? Запускал и 200 потоков для теста, хоть и с тормозами, но все запустилось.
Это из-за
BE.callbacks.element
Не так давно добавил оптимизацию - она удаляет сишный элемент как только на нем было выполнено какое-то действие.
Например, такой код точно будет работатьcss("#id").move()! css("#id").click()!
а такой может упасть
EL = css("#id") EL.move()! //Тут EL будет помечен для удаления EL.click()!
-
@support said in Яндекс Метрика:
Это из-за BE.callbacks.element
Спасибо, поправлю. Но с падением разобрался, оказалось, почему-то утекает память. В диспетчере не отображается, куда, каждый поток потребляет около 70 МБ оперативной памяти. На деле же 20 потоков забирают около 10ГБ оперативки. Временные переменные если и создаются, то в пределах объекта BE, и каждый раз заменяются на новые, т.е. нет утечки памяти. Может ли это быть связано с циклом и вызовом в нем асинхронных функций?
-
Есть ли функция для получения количества потоков?
-
каждый поток потребляет около 70 МБ оперативной памяти
Это в процессе BrowserAutomationStudio.exe? или в Worker.exe?
Если в первом, то нужен проектЕсть ли функция для получения количества потоков?
Нет, но ее обычно или задает разраб, либо она берется из ресурса. Для получение количества ресурсов можно взять ресурс еще 1 раз
-
@support в Worker, от 50 до 80МБ потребляется. Могу скинуть проект, но в личные сообщения
-
@blackhacker Если в worker от 50-80 мб, то это нормально, там ведь браузер.
-
@support Да, это так, но остальная память утекает в неизвестном пока направлении, хочу посмотреть каким-нибудь сторонним софтом, куда. Доступно около 10гб памяти, чего в теории должно хватать на 130-140 потоков, а у меня на 20 потоках уже все занимается. При 30 BAS зависает и Windows предлагает его завершить с ошибкой.
А с вами как-то можно связаться, кроме форума? Или есть какое-то точное время, когда вы здесь появляетесь? Иногда появляются проблемы со скриптом, и без вашей помощи дело не движется дальше (а вы иногда по 2-3 дня не заходите на форум, например в выходные)
-
Память может "пропадать" если число дескрипторов в системе очень большое. Но БАС так не делает.
Сижу на только форуме. Но появляюсь здесь регулярно.
-
@blackhacker Ну как, получилось найти причину проблем с памятью?
Вот хорошая тулза для чека состояния системы
https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx
-
@support Да, через ProcessExplorer посмотрел, все-таки Worker потребляет больше, чем указывает диспетчер Windows. Около 500Мб. И я подозреваю, что это из-за одной моей криво написанной функции, я ее переделываю как раз.
Еще появился вопрос, _set_result() может принимать только строковые значения? Если нет, то почему не передавать туда данные в объекте, например из random_point, или true\false из проверки на существование элемента exist()?Функцию переделал, но не помогло. Заметил, что загрузка сайта занимает около 250-300Мб, остальное видимо код. Попробую отключить картинки, может поможет. Но очень сомневаюсь. Как в маске указать расширение для конкретного домена? Будет ли работать так
*domain.ru/*.png
?
-
удалось найти причину, почему берет так много оперативы? у меня вообще каждый поток по 700 мб берет. при запуске 10мб, и потом набирает каждую секунду
кстати отключение картинок не особо улучшило ситуацию
-
@smurfik Нет пока, жду вот, пока разработчик ответит) Я думал, у меня одного так. У тебя во время загрузки сайта, или просто так набирает?