Система не может найти файл, указанный в модуле `edx-dl`

Я пытаюсь использовать этот модуль Python. https://github.com/coursera-dl/edx-dl

Пожалуйста, извините мои базовые знания.

Установил Anaconda 3 Windows 10 затем:

pip install edx-dl

pip install --upgrade youtube-dl

Тогда для прохождения курсов делали:

edx-dl -u user@user.com --list-courses

edx-dl -u user@user.com COURSE_URL

Это все работало, однако, как только начались загрузки, получалось: Получил SSL/ Ошибка соединения: HTTP Error 403: Forbidden

Fiddler показал, что он был заблокирован Cloudfare, я подозреваю, из-за User-Agent

Я установил Fake_UserAgent https://pypi.python.org/pypi/fake-useragent и добавил:

from fake_useragent import UserAgent #added this


def edx_get_headers():
    """
    Build the Open edX headers to create future requests.
    """
    logging.info('Building initial headers for future requests.')

    headers = {
        'User-Agent': 'edX-downloader/0.01',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
        'Referer': EDX_HOMEPAGE,
        'X-Requested-With': 'XMLHttpRequest',
        'X-CSRFToken': _get_initial_token(EDX_HOMEPAGE),
    }

    ua = UserAgent()   #added this
    headers['User-Agent'] = ua.ie #added this

Затем он загрузил pdf и xls, но получил еще одну ошибку из-за request.py, добавляющего заголовок, поэтому добавил fake в request.py и закомментировал заголовок по умолчанию, как показано ниже.

from fake_useragent import UserAgent
        ub = UserAgent()
        self.addheaders = [('User-Agent', ub.ie)] 
        # self.addheaders = [('User-Agent', self.version), ('Accept', '*/*')] [('User-Agent', self.version), ('Accept', '*/*')]

Новая ошибка ниже. Я не могу решить, как устранить неполадки дальше. Я подозреваю, что он не может найти файл / путь, возможно, из-за Windows.

[download] https://youtube.com/watch?v=bKkrDLwDnDE => Downloaded\Implementing_ETL_with_SQL_Server_Integration_Services\02-Module_1__ETL_Processing\01-%(title)s-%(id)s.%(ext)s
Downloading video with URL https://youtube.com/watch?v=bKkrDLwDnDE from YouTube.
Traceback (most recent call last):
  File "edx-dl.py", line 6, in <module>
    edx_dl.main()
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 1080, in main
    download(args, selections, filtered_units, headers)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 857, in download
    headers)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 819, in download_unit
    headers)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 801, in download_video
    skip_or_download(youtube_downloads, headers, args)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 788, in skip_or_download
    f(url, filename, headers, args)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 721, in download_url
    download_youtube_url(url, filename, headers, args)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\edx_dl.py", line 761, in download_youtube_url
    execute_command(cmd, args)
  File "c:\edx-dl-master\edx-dl-master\edx_dl\utils.py", line 37, in execute_command
    subprocess.check_call(cmd)
  File "C:\Users\anton\Anaconda3\lib\subprocess.py", line 286, in check_call
    retcode = call(*popenargs, **kwargs)
  File "C:\Users\anton\Anaconda3\lib\subprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Users\anton\Anaconda3\lib\subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "C:\Users\anton\Anaconda3\lib\subprocess.py", line 997, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified

Та же проблема, что и здесь, однако, никакого решения или помощи предоставлено не было, поэтому я решил попробовать здесь.

https://github.com/coursera-dl/edx-dl/issues/368

Консультации о том, как научиться устранять неполадки, будет принята с благодарностью.

2 ответа

Отладил код и обнаружил, что не смог найти youtube-dl,

Проверено эхо %PATH% и понял, что у меня есть путь к:

C:...\Anaconda3\ но не для C:...\Anaconda3\Scripts\ (this is location of youtube_dl.exe),

Я добавил этот путь, но не перезагрузил.

Перезагрузился и теперь решен.

Есть еще одно простое решение и нет необходимости использовать Fake_UserAgentПросто используйте другие загрузчики, как wget,

Установите свежий edx_dl.

Если вы используете Windows для загрузки wget, сохраните его, например, на диске H.

+ Изменить download_url функционировать так:

def download_url(url, filename, headers, args):
    """
    Downloads the given url in filename.
    """

    if is_youtube_url(url):
        download_youtube_url(url, filename, headers, args)
    else:
    # jcline
        cmd = (["h:\wget.exe", url, '-c', '-O', filename, '--keep-session-cookies', '--no-check-certificate'])
        execute_command(cmd, args)

( Источник)

Другие вопросы по тегам