Подтвердить что ты не робот

Обнаружение поисковых сканеров с помощью JavaScript

Мне интересно, как я пойду на поиск поисковых сканеров? Причина, по которой я спрашиваю, заключается в том, что я хочу подавить определенные вызовы JavaScript, если пользовательский агент является ботом.

Я нашел пример того, как обнаружить определенный браузер, но не могу найти примеры того, как обнаружить искателя поиска:

/MSIE (\d+\.\d+);/.test(navigator.userAgent); //test for MSIE x.x

Пример поисковых сканеров, которые я хочу заблокировать:

Google 
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) 
Googlebot/2.1 (+http://www.googlebot.com/bot.html) 
Googlebot/2.1 (+http://www.google.com/bot.html) 

Baidu 
Baiduspider+(+http://www.baidu.com/search/spider_jp.html) 
Baiduspider+(+http://www.baidu.com/search/spider.htm) 
BaiDuSpider 
4b9b3361

Ответ 1

Это регулярное выражение, которое библиотека rua UA agent_orange использует, чтобы проверить, не выглядит ли userAgent ботом. Вы можете сузить его для конкретных ботов, сославшись на список userAgent ботов здесь:

/bot|crawler|spider|crawling/i

Например, у вас есть какой-то объект, util.browser, вы можете сохранить тип устройства, на котором работает пользователь:

util.browser = {
   bot: /bot|googlebot|crawler|spider|robot|crawling/i.test(navigator.userAgent),
   mobile: ...,
   desktop: ...
}

Ответ 2

Следующее регулярное выражение будет соответствовать крупнейшим поисковым системам согласно этой записи.

/bot|google|baidu|bing|msn|duckduckbot|teoma|slurp|yandex/i
    .test(navigator.userAgent)

Поисковые системы соответствий:

  • Baidu
  • Bingbot/MSN
  • DuckDuckGo
  • Google
  • Teoma
  • Yahoo!
  • Яндекс

Кроме того, я добавил bot как ловушку для небольших роботов/ботов.

Ответ 3

Попробуйте это. Он основан на списке сканеров, доступных на https://github.com/monperrus/crawler-user-agents

var botPattern = "(googlebot\/|Googlebot-Mobile|Googlebot-Image|Google favicon|Mediapartners-Google|bingbot|slurp|java|wget|curl|Commons-HttpClient|Python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|jyxobot|FAST-WebCrawler|FAST Enterprise Crawler|biglotron|teoma|convera|seekbot|gigablast|exabot|ngbot|ia_archiver|GingerCrawler|webmon |httrack|webcrawler|grub.org|UsineNouvelleCrawler|antibot|netresearchserver|speedy|fluffy|bibnum.bnf|findlink|msrbot|panscient|yacybot|AISearchBot|IOI|ips-agent|tagoobot|MJ12bot|dotbot|woriobot|yanga|buzzbot|mlbot|yandexbot|purebot|Linguee Bot|Voyager|CyberPatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|Adidxbot|blekkobot|ezooms|dotbot|Mail.RU_Bot|discobot|heritrix|findthatfile|europarchive.org|NerdByNature.Bot|sistrix crawler|ahrefsbot|Aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|facebookexternalhit|yeti|RetrevoPageAnalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|DuckDuckBot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnam gnam spider|web-archive-net.com.bot|backlinkcrawler|coccoc|integromedb|content crawler spider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler.com|siteexplorer.info|elisabot|proximic|changedetection|blexbot|arabot|WeSEE:Search|niki-bot|CrystalSemanticsBot|rogerbot|360Spider|psbot|InterfaxScanBot|Lipperhey SEO Service|CC Metadata Scaper|g00g1e.net|GrapeshotCrawler|urlappendbot|brainobot|fr-crawler|binlar|SimpleCrawler|Livelapbot|Twitterbot|cXensebot|smtbot|bnf.fr_bot|A6-Indexer|ADmantX|Facebot|Twitterbot|OrangeBot|memorybot|AdvBot|MegaIndex|SemanticScholarBot|ltx71|nerdybot|xovibot|BUbiNG|Qwantify|archive.org_bot|Applebot|TweetmemeBot|crawler4j|findxbot|SemrushBot|yoozBot|lipperhey|y!j-asr|Domain Re-Animator Bot|AddThis)";
var re = new RegExp(botPattern, 'i');
var userAgent = 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)';
if (re.test(userAgent)) {
    console.log('the user agent is a crawler!');
}

Ответ 4

Пример "тест для MSIE x.x" - это просто код для тестирования userAgent против регулярного выражения. В вашем примере Regexp является

/MSIE (\d+\.\d+);/

часть. Просто замените его своим собственным Regexp, с которым вы хотите протестировать пользовательский агент. Это было бы что-то вроде

/Google|Baidu|Baiduspider/.test(navigator.userAgent)

где вертикальная полоса является оператором "или", чтобы соответствовать пользовательскому агенту против всех ваших упомянутых роботов. Для получения дополнительной информации о регулярном выражении вы можете обратиться к этому сайту, поскольку javascript использует Perl-стиль RegExp.

Ответ 5

Вы уже раскрыли, что вы разрешите в качестве пользовательских агентов... Но обычно сканеры используют различные ПРИНЯТЫЕ пользовательские агенты, поскольку, насколько я понимаю, вы не можете ограничить никакие сканеры, не затрагивая реальных пользователей.