Guest User

Untitled

a guest
Nov 15th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. /**
  2. * Проверка по косвенным параметрам на бота\selenium\headless browser
  3. * @function botDetection
  4. * @return {Boolean} isBot flag
  5. */
  6. botDetection () {
  7. let isBot = false,
  8. rules = [
  9. //Phantomjs как правило, не имеет внутри себя браузерных плагинов
  10. () => (navigator.plugins instanceof PluginArray) === false || navigator.plugins.length == 0,
  11. //PhantomJs 1.x прокидывает 2 свойства в глобальный объект, проверим их
  12. () => (window.callPhantom || window._phantom),
  13. //PhantomJs и многие другие боты не
  14. () => (!Function.prototype.bind),
  15. //Ошибки в коде, имеют stacktrace в котором можно отследить phantom, сделаем ошибку и проверим
  16. () => {
  17. let err;
  18. try { null[0](); } catch (error) { err = error; }
  19. return (err.indexOf('phantom') > -1)
  20. },
  21. //Запуская код через nodejs, у window будет доступен Buffer
  22. () => window.Buffer !== undefined,
  23. //Запуская сайт через coachjs у window будет доступен emit
  24. () => window.emit !== undefined,
  25. //Запуская сайт через rhino - у window будет доступен spawn
  26. () => window.spawn !== undefined,
  27. //Не только селениум использует webdriver, но и другие боты
  28. () => window.webdriver !== undefined,
  29. //Проверяем chrome based dom automation - также инструмент ботов для работы с DOM
  30. () => window.domAutomation !== undefined || window.domAutomationController !== undefined,
  31. //Headless браузеры не имеют размера окна, проверим это
  32. //WARNING: эту проверку не пройдут IOS 8 и ниже, а также sailfish webview
  33. () => window.outerWidth === 0 && window.outerHeight === 0,
  34. //Множество ботов не заботится проставлении navigator.online и ходят по сайту в оффлайн режиме
  35. () => window.navigator.onLine === false || isBot === true
  36. ];
  37.  
  38. //Проверяем правила
  39. for (let i = 0; i < rules.length; i++) {
  40. if(rules[i]() === true) isBot = true;
  41. }
  42.  
  43. return isBot;
  44. }
Add Comment
Please, Sign In to add comment