Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Вот полная ошибка:
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)]
Type "help", "copyright", "credits" or "license" for more information.
[анализируем requests_interception.py]
Введите ссылку на видео-файл из Облака:Ссылка скрыта от гостей
Traceback (most recent call last):
Файл "C:\Users\Пк\Desktop\Перехват запросов с Selenium Wire и Python\requests_interception.py", строка 126, из <module> main()
Файл "C:\Users\Пк\Desktop\Перехват запросов с Selenium Wire и Python\requests_interception.py", строка 110, из <module> if link := get_link(url):
Файл "C:\Users\Пк\Desktop\Перехват запросов с Selenium Wire и Python\requests_interception.py", строка 44, из <module> driver = webdriver.Chrome(options=options, service=Service(log_path=os.devnull, executable_path=exec_path))
Файл "c:\python\lib\site-packages\seleniumwire\webdriver.py", строка 218, из __init__ super().__init__(*args, **kwargs)
Файл "c:\python\lib\site-packages\selenium\webdriver\chrome\webdriver.py", строка 70, из __init__ super(WebDriver, self).__init__(DesiredCapabilities.CHROME['browserName'], "goog",
Файл "c:\python\lib\site-packages\selenium\webdriver\chromium\webdriver.py", строка 93, из __init__ RemoteWebDriver.__init__(
Файл "c:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 268, из __init__ self.start_session(capabilities, browser_profile)
Файл "c:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 359, из start_session response = self.execute(Command.NEW_SESSION, parameters)
Файл "c:\python\lib\site-packages\selenium\webdriver\remote\webdriver.py", строка 424, из execute self.error_handler.check_response(response)
Файл "c:\python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", строка 247, из check_response raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
Stacktrace:
Backtrace:
Ordinal0 [0x00CBA113+1548563]
Ordinal0 [0x00C3DDA1+1039777]
Ordinal0 [0x00BBE485+517253]
Ordinal0 [0x00B4C0F1+49393]
Ordinal0 [0x00B6B797+178071]
Ordinal0 [0x00B6B59D+177565]
Ordinal0 [0x00B695FB+169467]
Ordinal0 [0x00B5160A+71178]
Ordinal0 [0x00B52690+75408]
Ordinal0 [0x00B52629+75305]
Ordinal0 [0x00C571B7+1143223]
GetHandleVerifier [0x00D52B46+507814]
GetHandleVerifier [0x00D52864+507076]
GetHandleVerifier [0x00D59F47+537511]
GetHandleVerifier [0x00D53402+510050]
Ordinal0 [0x00C4F29C+1110684]
Ordinal0 [0x00C5938B+1151883]
Ordinal0 [0x00C594F3+1152243]
Ordinal0 [0x00C583F5+1147893]
BaseThreadInitThunk [0x776400F9+25]
RtlGetAppContainerNamedObjectPath [0x77D97BBE+286]
RtlGetAppContainerNamedObjectPath [0x77D97B8E+238]
Редактор выделяет красным эту строку кода:
raise exception_class(message, screen, stacktrace)
Спасибо.
Всё супер.
Дело было в драйвере.
Я Вам отправлю на почту моё общение с ChatGPT
Там пытаемся созлать новый плейлист. Который будет работать на ПК.
Подскажите пожалуйста, что может быть не так?Введите ссылку на видео-файл из Облака:Ссылка скрыта от гостей
Не могу получить ссылку на плейлист с разрешениями: None
Process finished with exit code 0
Здравствуйте! У меня вот такой результат выполнения скрипта:
Подскажите пожалуйста, что может быть не так?
Данные ошибки появляются вследствие того, что поддержка некоторых библиотек прекращена или не устанавливается по умолчанию в python 3.12. Поэтому, чтобы исправить ошибку: "ModuleNotFoundError: No module named 'blinker._saferef'", нужно установить:Traceback (most recent call last):
File "D:\PYCHARM\lop\A!!\requests_interception\requests_interception.py", line 26, in <module>
from seleniumwire import webdriver
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\webdriver.py", line 28, in <module>
from seleniumwire import backend, utils
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\backend.py", line 4, in <module>
from seleniumwire.server import MitmProxy
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\server.py", line 5, in <module>
from seleniumwire.handler import InterceptRequestHandler
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\handler.py", line 5, in <module>
from seleniumwire import har
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\har.py", line 11, in <module>
from seleniumwire.thirdparty.mitmproxy import connections
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\connections.py", line 10, in <module>
from seleniumwire.thirdparty.mitmproxy.net import tls, tcp
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\net\tls.py", line 15, in <module>
import seleniumwire.thirdparty.mitmproxy.options
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\options.py", line 5, in <module>
from seleniumwire.thirdparty.mitmproxy import optmanager
File "D:\PYCHARM\lop\venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\optmanager.py", line 9, in <module>
import blinker._saferef
ModuleNotFoundError: No module named 'blinker._saferef'
pip install blinker==1.7.0
import os
import time
from urllib.parse import urlparse, urljoin
from requests import get
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from seleniumwire import webdriver
options = Options()
options.add_argument("--headless")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
def get_link(url: str) -> (str, bool):
"""
Получение ссылки на плейлист со ссылками на плейлисты с различным разрешением.
:param url: Ссылка на страницу с ресурсом (в данном случае видео).
:return: Возвращаем найденную и отфильтрованную ссылку.
"""
driver = webdriver.Chrome(options=options, service=Service(log_path=os.devnull))
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
'source': '''
delete window.cdc_adoQpoasnfa76pfcZLmcfl_Array;
delete window.cdc_adoQpoasnfa76pfcZLmcfl_Promise;
delete window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol;
'''
})
driver.get(url)
time.sleep(1)
for req in driver.requests:
if req.response:
if "/0p/" in urlparse(req.url).path:
return req.url
continue
return False
def get_playlist(pl_url: str) -> (str, bool):
"""
Скачивание плейлиста со ссылками на плейлисты с разрешениями.
:param pl_url: Ссылка на плейлист с разрешениями.
:return: Текст плейлиста для обработки.
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/108.0.0.0 YaBrowser/23.1.2.987 Yowser/2.5 Safari/537.36',
'Host': 'cloud.mail.ru'
}
try:
res = get(url=pl_url, headers=headers, timeout=5)
return res.text if res.status_code == 200 else False
except Exception:
return False
def get_resolution(text: str, url: str) -> (str, bool):
"""
Парсинг содержимого плейлиста и получение ссылки на плейлист
с самым большим разрешением.
:param text: Текст плейлиста.
:param url: Ссылка на плейлист со ссылками (исходная ссылка).
:return: Ссылка на плейлист с самым большим разрешением.
"""
res = num = 0
link = ""
for txt in text.splitlines():
if txt.startswith("#EXT-X"):
num = int(txt.strip().split("x")[-1])
continue
elif txt.startswith("/"):
if num > res:
res = num
link = urljoin(url, txt.strip())
return link if link else False
def main():
"""
Запрос ссылки на ресурс. Запуск перехвата запросов.
Получение текста плейлиста. Парсинг. Вывод в терминал ссылки
на плейлист с самым высоким разрешением.
"""
url = input("Введите ссылку на видео-файл из Облака: ")
if link := get_link(url):
print(f"Ссылка на плейлист с разрешениями получена: {link}")
print(f"Получение плейлиста с разрешениями")
if text := get_playlist(link):
print(f"Плейлист с разрешениями получен. Обработка")
if res_link := get_resolution(text, link):
print(f"Ссылка на самое большое разрешение в плейлисте: {res_link}")
else:
print(f'Не удалось получить ссылку{res_link}')
else:
print(f'Не могу получить плейлист: {text}')
else:
print(f'Не могу получить ссылку на плейлист с разрешениями: {link}')
if __name__ == "__main__":
main()
pip install packaging
pip install setuptools
Traceback (most recent call last):Данные ошибки появляются вследствие того, что поддержка некоторых библиотек прекращена или не устанавливается по умолчанию в python 3.12. Поэтому, чтобы исправить ошибку: "ModuleNotFoundError: No module named 'blinker._saferef'", нужно установить:
pip install blinker==1.7.0
Также, должны быть установлены библиотеки из файла: requirements.txt и браузер Google Chrome.
Код в статье написан с загрузкой хромдрайвера из скачанного вами файла. Однако, в данном случае код нужно слегка поправить:
Python:import os import time from urllib.parse import urlparse, urljoin from requests import get from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from seleniumwire import webdriver options = Options() options.add_argument("--headless") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) options.add_argument("--disable-blink-features=AutomationControlled") def get_link(url: str) -> (str, bool): """ Получение ссылки на плейлист со ссылками на плейлисты с различным разрешением. :param url: Ссылка на страницу с ресурсом (в данном случае видео). :return: Возвращаем найденную и отфильтрованную ссылку. """ driver = webdriver.Chrome(options=options, service=Service(log_path=os.devnull)) driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { 'source': ''' delete window.cdc_adoQpoasnfa76pfcZLmcfl_Array; delete window.cdc_adoQpoasnfa76pfcZLmcfl_Promise; delete window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol; ''' }) driver.get(url) time.sleep(1) for req in driver.requests: if req.response: if "/0p/" in urlparse(req.url).path: return req.url continue return False def get_playlist(pl_url: str) -> (str, bool): """ Скачивание плейлиста со ссылками на плейлисты с разрешениями. :param pl_url: Ссылка на плейлист с разрешениями. :return: Текст плейлиста для обработки. """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' 'Chrome/108.0.0.0 YaBrowser/23.1.2.987 Yowser/2.5 Safari/537.36', 'Host': 'cloud.mail.ru' } try: res = get(url=pl_url, headers=headers, timeout=5) return res.text if res.status_code == 200 else False except Exception: return False def get_resolution(text: str, url: str) -> (str, bool): """ Парсинг содержимого плейлиста и получение ссылки на плейлист с самым большим разрешением. :param text: Текст плейлиста. :param url: Ссылка на плейлист со ссылками (исходная ссылка). :return: Ссылка на плейлист с самым большим разрешением. """ res = num = 0 link = "" for txt in text.splitlines(): if txt.startswith("#EXT-X"): num = int(txt.strip().split("x")[-1]) continue elif txt.startswith("/"): if num > res: res = num link = urljoin(url, txt.strip()) return link if link else False def main(): """ Запрос ссылки на ресурс. Запуск перехвата запросов. Получение текста плейлиста. Парсинг. Вывод в терминал ссылки на плейлист с самым высоким разрешением. """ url = input("Введите ссылку на видео-файл из Облака: ") if link := get_link(url): print(f"Ссылка на плейлист с разрешениями получена: {link}") print(f"Получение плейлиста с разрешениями") if text := get_playlist(link): print(f"Плейлист с разрешениями получен. Обработка") if res_link := get_resolution(text, link): print(f"Ссылка на самое большое разрешение в плейлисте: {res_link}") else: print(f'Не удалось получить ссылку{res_link}') else: print(f'Не могу получить плейлист: {text}') else: print(f'Не могу получить ссылку на плейлист с разрешениями: {link}') if __name__ == "__main__": main()
Код:
У меня появились также другие ошибки, связанные с библиотеками, но они были исправлены простой их установкой.
Таким образом, установите библиотеки из файла: requirements.txt, установите blinker, замените код из статьи кодом из ответа и установите Google Chrome. Должно заработать.
На всякий случай еще пара команд для установки библиотек, на отсутствие которых ругался интерпретатор у меня:
Bash:pip install packaging pip install setuptools
У меня все заработало.
Обучение наступательной кибербезопасности в игровой форме. Начать игру!