Я реализую скрипт python в основном на основе pyautogui. Одна из вещей, которую делает скрипт, — это открытие веб-страницы Chrome. После этого мне нужно будет получить доступ к DOM этой открытой в данный момент веб-страницы. Поскольку я не открывал браузер с селеном, я не могу использовать его для анализа DOM. Однако мой вопрос: доступна ли эта открытая в настоящее время хромированная страница / сохранена ли она где-то на жестком диске, чтобы я мог получить к ней доступ с помощью селена? Как файл .html? Я проверил здесь много других вопросов, и пользователи говорят о кеше Chrome, но там нет html-файлов. Мне просто нужно иметь доступ к текущей открытой странице, а не ко всем историческим данным в кеше. Открытие веб-браузера непосредственно с помощью селена также не является вариантом, поскольку большинство проанализированных веб-сайтов имеют технологию капчи и дистилляции. Спасибо.
Получить текущую открытую страницу Chrome в html без ее сохранения
Ответы (1)
Если вы запустите исходный хром с аргументом --remote-debugging-port=PORT_NR
и посетите localhost:PORT_NR из другого браузера, у вас будет доступ ко всему содержимому браузера, включая консоль разработчика.
Если у вас есть это, у вас есть несколько путей:
Вы можете посетить http://localhost:PORT_NR в любом другом браузере (или даже в том же браузере), и вы должен иметь полный доступ к содержимому оригинального Chrome. С Selenium вам должно быть относительно легко обойтись.
Вы также можете использовать devtools api (документация... есть... ну... есть возможности для улучшения. Ищите
chrome devtools protocol
, чтобы быть пораженным отсутствием документации). Например, вы можете перейти по адресу http://localhost:PORT_NR/json, чтобы получить доступные URI отладки. Возьмите соответствующую конечную точку веб-сокета (webSocketDebuggerUrl). Откройте соединение через веб-сокет и введите команду, например{"method": "DOM.getDocument", "id":12}
. Вы можете найти доступные команды, связанные с DOM, здесь: https://chromedevtools.github.io/devtools-protocol/1-3/DOM
webdriver.page_source
, который вы сможете сохранить позже. Он будет содержать отображаемый в данный момент html (в основном тот же, что вы получаете с помощью CTRL-U в любом браузере), но не внешние ресурсы (никаких файлов css/js/pic/whataver, только ссылка на них) - person skandigraun   schedule 21.09.2018--remote-debugging-port=PORT_NR
, а затем посетите localhost:PORT_NR из другого браузера, вы получите доступ ко всем содержимое исходного браузера, включая консоль разработчика. Также доступна некоторая документация по API (хотя и очень скудная), ищитеchrome devtools protocol
. Однако, посещая порт с селеном, у вас должно быть относительно легкое время для работы. - person skandigraun   schedule 21.09.2018subprocess.call (["CHROME_EXECUTEABLE_PATH", "--remote-debugging-port=9222"])
— аргумент должен быть новым элементом массива. PORT_NR должен быть фактическим числом. Затем зайдите на localhost:9222 в новом браузере. - person skandigraun   schedule 21.09.2018{"method": "DOM.getDocument", "id":12}
. Идентификатор обязателен, может быть любым целым числом. Кроме того, должен быть действительный JSON. Найдите доступные методы, связанные с DOM, здесь: chromedevtools.github.io/devtools-protocol/1. -3/DOM (Если это хоть немного поможет, создам ответ, прежде чем моды убьют нас за миллион комментариев...) - person skandigraun   schedule 21.09.2018