В одной из моих предыдущих статей:Один навык в день: Как правильно удалить значение window.navigator.webdriver в Selenium, я говорил о том, как скрыть, установив параметры запуска в Chrome, запускаемый Seleniumwindow.navigator.webdriver
, опровергает недостатки использования JavaScript-инъекций, циркулирующие в спам-статьях в Интернете.
Поскольку в запущенном с помощью Selenium Chrome можно распознать десятки функций, он не так популярен в мире поисковых роботов, как раньше. Puppeteer, новичок, имитирующий браузеры, внезапно появился и постепенно привлек внимание мира рептилий. Puppeteer нужно контролировать с помощью JavaScript, если вы используете Python, вам нужно использовать Pyppeteer.
Если вы используете смоделированный браузер для сканирования Taobao, вы обнаружите, что независимо от того, как изменены параметры, Selenium всегда можно сразу распознать. Но если вы воспользуетесь методом, описанным в этой статье, чтобы захватить Taobao с помощью Pyppeteer, вы обнаружите другой огромный мир.
Сегодня поговорим о том, как спрятаться в Pyppeteerwindow.navigator.webdriver
Сначала мы открываем окно браузера через Pyppeteer, используя следующий код:
import asyncio
from pyppeteer import launch
async def main():
browser = await launch(executablePath='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
headless=False)
page = await browser.newPage()
await page.goto('http://exercise.kingname.info')
input('测试完成以后回到这里按下回车...')
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
После запуска кода он откроет браузер Chrome и посетитhttp://exercise.kingname.info/
(Это веб-сайт для практики краулеров, который я написал. Вы можете использовать этот веб-сайт для практики разработки краулеров. На нем есть несколько сложных вопросов ^_^)
В этом браузере мы открываем инструменты разработчика, запрашиваемwindow.navigator.webdriver
обнаружит, что его значение равноtrue
. Как показано ниже:
Код в Интернете — это не что иное, как внедрение JavaScript.Перед загрузкой JavaScript, поставляемого с веб-страницей, запустите фрагмент JavaScript заранее, чтобы изменить запрос.window.navigator.webdriver
Интерфейс.
Этот метод приходится выполнять каждый раз при открытии новой страницы, что громоздко и глупо!
Итак, каков правильный путь?
Когда я писал эту статью (15 августа 2019 г.), последней версией Pyppeteer была 0.0.25, как показано на следующем рисунке:
На этом этапе вы можете в PyCharm удерживать нажатой клавишу Command (пользователи Windows, Linux удерживают нажатой клавишу Ctrl) и щелкнуть левой кнопкой мыши.from pyppeteer import launch
серединаlaunch
, который автоматически переходит к исходному коду Pyppeteerlauncher.py
документ.
Переверните код вверх и в строке 60 найдите код, обрамленный на следующем рисунке:
Пучок--enable-automation
Закомментируйте эту строку. В этот момент PyCharm предложит вам изменить исходный код, выберите «ОК». Как показано ниже.
Модифицированный код показан на следующем рисунке:
Это все изменения, которые вам нужно сделать.
Перезапустив код прямо сейчас, вы обнаружите,window.navigator.webdriver
ужеundefined
. Как показано ниже.
Среди функций грядущей версии Pyppeteer 0.0.26 я увидел элемент, обведенный на следующем рисунке:
Итак, после выхода версии 0.0.26 мы можем отключить ее напрямую, передав параметры--enable-automation
, больше не нужно изменять исходный код.
Не по теме: Официальная документация и исходный код - ваши хорошие друзья.Если в официальной документации не удается найти нужную вам функцию, а исходный код не понятен, то зайдите и обратите внимание на мой официальный аккаунт. Нажмите и удерживайте QR-код ниже, чтобы подписаться на меня: