@Electr1k

Как вывести код с браузерным расширением?

Есть сайт и браузерное расширение к нему, которое добавляет свой блок(div) в HTML сайта. Этот сайт я и решил парсить на питоне. Ничего не найдя в функционале requests + bs4 для работы с расширениями я решил парсить при помощи seleniuma. Подключил к браузеру расширение, но при получение HTML, программа выводит исходный код, а не код страницы с изменениями (браузерным расширением), хотя в браузере расширение отображается. Вот код:
from selenium import webdriver
import os
from selenium.webdriver.chrome.options import Options

headers = {'user-agent':'*', 'accept':'*'}


executable_path = "chromedriver.exe"
os.environ["webdriver.chrome.driver"] = executable_path

chrome_options = Options()
chrome_options.add_extension('1.crx') #расширение 

driver = webdriver.Chrome(executable_path=executable_path, options=chrome_options)
driver.get("*url*")
html = driver.page_source
print(html)

В документации seleniuma методов для вывода кода я не нашел, но нашел на просторах интернета .page_source
Я думал, что суть проблемы в методе .page_source, и он выводит исходный код, заменив этот метод на .find_element_by_id('') (поиск по id в коде) блок с расширением так же не выводится, хотя в браузере он отображается. Вот собственно вопрос почему не отображается блок с расширением и как это исправить?
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
MinTnt
@MinTnt
Всё же можно использовать requests, учитывая что большинство появляющихся сообщений появляются в XHR, позже добавлю примерную инструкцию.

1) Сначала открываем код элемента, заходим в Network, и в XHR, там в основном отображаются подгружаемый текст.
картинка
Kw2GU.png

2) Далее можно нажать Preview или Response для ускорения поиска нужного скрипта
картинка
Kw2La.png

3) Когда нашли нужный заходим в Headers и получаем метод(get/post) а так же url для запроса
картинка
Kw2Pw.png

4) Копируем все (кроме того что идёт с ":" в начале) это будет нашим headers
картинка
Kw2YK.png

Перед использованием так же нужно будет отформатировать под словарь, по типу
#accept: */*
head = {'accept': '*/*', ... }
5) Если это Post запрос, то так же достаём параметры из Payload
6) Повторяем запрос, со взятым методом и данными requests.get(url, headers = head)
или же если пост requests.post(url, headers = head, data = Payload)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы