Яндекс Метрика



  • Загрузки страниц, выполненные через 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

    Вот фикс.

    http://bablosoft.com/distr/BrowserAutomationStudioDevelopment/16.1.4/BrowserAutomationStudioInstallAllInOne.exe

    И не забывайте, чтобы посещение зачлось нужно подвигать мышкой



  • @blackhacker Если хотите, можете оформить и выложить скрипт в магазин, тут многие интересовались метрикой.



  • @support Спасибо, скоро выложу) Придется вырезать часть кода из моего скрипта, у меня гораздо больше функций, чем просто прогулка по сайту. Но я не знаю, какую примерно выставить цену, чтобы и не завышать сильно, и не за бесценок выставлять. Что-то нужно знать для фикса (устанавливать document.referer), или мой текущий скрипт будет работать? Насколько скрипт будет защищен? У меня все функции скрипта находятся в секции "выполнить код", его любой желающий сможет выложить потом. Я скачал скрипт SiteVisitor из магазина, и без труда получил его исходники.
    И еще появился вопрос. Во время выполнения иногда вываливается ошибка
    1 - TypeError: Result of expression '_result().split' [undefined] is not a function. Номер строки:3 Во время выполнения скрипта

    _on_error стоит, игнорирование ошибок тоже включено. Но скрипт все равно завершается.



  • @blackhacker

    Но я не знаю, какую примерно выставить цену, чтобы и не завышать сильно, и не за бесценок выставлять.

    Я тоже не знаю, слышал, что есть такие сервисы, значит должен быть и спрос. Ну и такой скрипт не будет требовать постоянных доработок.

    Что-то нужно знать для фикса (устанавливать 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 потоков для теста, хоть и с тормозами, но все запустилось.



  • @blackhacker

    Возможно, в новой версии уже так сделано, но перед обновлением 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, и каждый раз заменяются на новые, т.е. нет утечки памяти. Может ли это быть связано с циклом и вызовом в нем асинхронных функций?



  • Есть ли функция для получения количества потоков?



  • @blackhacker

    каждый поток потребляет около 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мб, и потом набирает каждую секунду
    кстати отключение картинок не особо улучшило ситуацию


Log in to reply
 

  • 19
  • 30
  • 2
  • 19
  • 4
  • 5
  • 8
  • 39