Пишу скрипт с использованием Selenium, который переходит на определённый сайт и когда сайт посылает GET запрос с "get_check_records" в url скрипт должен модифицировать его, а именно выдавать заранее записанный в коде ответ, но я столкнулся с тем, что либо ловлю 404 или 501 ко всем запросам в браузере и без моего заранее сделанного в коде ответа соответственно, либо ответ вообще никак не модифицируется. Прямого ответа в гугле как провернуть подобные фокусы на python я не нашёл, обратился к ChatGPT, тот выдавал разные варианты: используя только selenium, использование библиотеки mitmproxy (он застрял на одной строчке кода), browsermobproxy (сделал всё по инструкции, скачал, указал основную папку, указал папку bin, но получил дохренилиард ошибок при его запуске и закрылся) и наконец библиотека mitm, какой вариант с ней он предлагал уже не найду, но и он был безуспешен.
Ниже его варианты, если это поможет
Первый вариант со встроенными функциями Seleniumfrom selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Создаем опции для Firefox WebDriver
firefox_options = Options()
# Инициализируем WebDriver с опциями
driver = webdriver.Firefox(options=firefox_options)
# Перехватываем GET запросы через DevTools Protocol
def request_intercepted(request):
if "get_check_records" in request.url:
# Модифицируем ответ на запрос
response = {
"body": "Модифицированный ответ здесь".encode("utf-8"),
"headers": request.headers,
"responseCode": 200,
}
request.continue_(
response=response
)
else:
request.continue_()
driver.request_interceptor = request_intercepted
# Открываем целевой сайт
driver.get("https://google.com")
# Выполняем необходимые действия на сайте с помощью Selenium
# ...
# Закрываем браузер
driver.quit()
Второй вариант через mitmproxy
import threading
import time
from mitmproxy import proxy, options
from mitmproxy.tools.dump import DumpMaster
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class Addon:
def __init__(self):
self.response_text = "Модифицированный ответ здесь"
def response(self, flow):
if "get_check_records" in flow.request.url:
flow.response = flow.request.make_response(200, self.response_text.encode())
def load(self, entry):
entry.add_response_hook(self.response)
def mitmproxy_thread():
opts = options.Options()
opts.add_option("ssl_insecure", bool, True, "Ignore SSL errors")
config = proxy.ProxyConfig(opts) # Застрял тут, тут вылезала ошибка, он менял её то на config = proxy.config.ProxyConfig(opts) то обратно на config = proxy.ProxyConfig(opts), безуспешно
addon = Addon()
master = DumpMaster(config)
master.addons.add(addon)
try:
master.run()
except KeyboardInterrupt:
master.shutdown()
def selenium_script():
# Создаем опции для Firefox WebDriver
firefox_options = webdriver.FirefoxOptions()
# Инициализируем WebDriver с опциями
driver = webdriver.Firefox(options=firefox_options)
# Открываем целевой сайт
driver.get("https://google.com")
# Выполняем необходимые действия на сайте с помощью Selenium
# ...
# Закрываем браузер
driver.quit()
if __name__ == "__main__":
mitmproxy_thread = threading.Thread(target=mitmproxy_thread)
mitmproxy_thread.start()
# Даем немного времени для запуска mitmproxy
time.sleep(2)
# Запускаем Selenium скрипт
selenium_script()
# Завершаем работу mitmproxy после выполнения Selenium скрипта
mitmproxy_thread.join()
Третий вариант с browsermobproxyfrom browsermobproxy import Server
import time
import json
# Запуск сервера BrowserMob Proxy
server = Server(r'ПУТЬ_К_ПАПКЕ_С_BROWSERMOB_PROXY')
server.start()
proxy = server.create_proxy()
# Настройка Selenium с использованием прокси
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy))
# Инициализация драйвера Chrome
driver = webdriver.Chrome(chrome_options=chrome_options)
# Настройка прокси для BrowserMob Proxy
proxy.new_har("modified_responses")
# Открытие страницы и выполнение действий
driver.get("https://google.com")
# Выполните дополнительные действия на странице
# Получение записанных данных
har = proxy.har
for entry in har['log']['entries']:
request = entry['request']
response = entry['response']
url = request['url']
if "get_check_records" in url:
# Модифицируйте ответ по вашему усмотрению
modified_response = "Ваш заранее записанный ответ"
response['content']['text'] = modified_response
# Закрытие драйвера и сервера BrowserMob Proxy
driver.quit()
server.stop()