Изменение window.navigator внутри кукловода, чтобы обойти систему антибота - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь сделать моего онлайн-бота незамеченным. Я прочитал ряд статей, как это сделать, и я взял все советы вместе и использовал их. Одним из них является изменение window.navigator.webdriver.

Мне удалось изменить window.navigator.webdriver внутри кукловода с помощью этого кода:

await page.evaluateOnNewDocument(() => {
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    });
});

Я обхожу этот тест просто отлично:

enter image description here

Однако этот тест все еще как-то смеется надо мной:

enter image description here

Почему WEBDRIVER несовместим?

1 Ответ

3 голосов
/ 28 мая 2019

Попробуйте это,

Сначала удалите определение, оно не будет работать, если вы определите и удалите из прототипа.

Object.defineProperty(navigator, 'webdriver', ()=>{}) // <-- delete this part

Замените ваш код этим.

delete navigator.__proto__.webdriver;

Результат: enter image description here

Почему это работает?

Удаление напрямую, просто удалите экземпляр объекта, а не фактическое определение. Получатель и установщик все еще там, так что браузер может найти его.

enter image description here

Однако, если вы удалите из реального прототипа, он больше не будет существовать вообще.

enter image description here

Дополнительные советы

Вы упомянули, что хотите сделать свое приложение необнаружимым, есть много плагинов, которые достигают того же самого, например, этот пакет под названием puppeteer-extra-plugin-stealth включает в себя несколько классных методов обнаружения анти-ботов. Иногда лучше просто повторно использовать некоторые пакеты, чем заново создавать решение снова и снова.

PS: Я могу ошибаться из-за вышеприведенного объяснения, не стесняйтесь направлять меня, чтобы я мог улучшить ответ.

...