python - Systemet kan ikke finde den fil, der er angivet i `edx-dl`-modulet

Indlæg af Hanne Mølgaard Plasc

Problem



Forsøger at bruge dette Python-modul. https://github.com/coursera-dl/edx-dl[17]


Vær venlig at undskylde min grundlæggende viden.


Installeret Anaconda 3 Windows 10 derefter:


pip install edx-dl


pip install --upgrade youtube-dl


Så for at få kurser gjorde:


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


edx-dl -u user@user.com COURSE\_URL


Det hele arbejdede dog, når downloads, der faktisk blev startet, var at få:
Fik SSL/Tilslutningsfejl: HTTP Error 403: Forbidden


Fiddler viste, at den blev blokeret af Cloudfare, jeg formoder, at det skyldes User-Agent


Jeg installerede Fake\_UserAgent https://pypi.python.org/pypi/fake-useragent og tilføjede: [18]


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




Den downloadede derefter en pdf og en xls, men fik en anden fejl på grund af request.py at tilføje et overskrift, så tilføjet falsk til requests.py og kommenterede standard header som nedenfor.


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', '*/*')]




Den nye fejl er nedenfor. Jeg kan ikke finde ud af, hvordan du fejler yderligere. Jeg formoder, at det ikke kan finde en fil/sti muligvis på grund af Windows.


[download] https://youtube.com/watch?v=bKkrDLwDnDE => DownloadedImplementing\_ETL\_with\_SQL\_Server\_Integration\_Services2-Module\_1\_\_ETL\_Processing1-\%(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-masteredx-dl-masteredx\_dledx\_dl.py", line 1080, in main
    download(args, selections, filtered\_units, headers)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 857, in download
    headers)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 819, in download\_unit
    headers)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 801, in download\_video
    skip\_or\_download(youtube\_downloads, headers, args)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 788, in skip\_or\_download
    f(url, filename, headers, args)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 721, in download\_url
    download\_youtube\_url(url, filename, headers, args)
  File "c:edx-dl-masteredx-dl-masteredx\_dledx\_dl.py", line 761, in download\_youtube\_url
    execute\_command(cmd, args)
  File "c:edx-dl-masteredx-dl-masteredx\_dlutils.py", line 37, in execute\_command
    subprocess.check\_call(cmd)
  File "C:UsersantonAnaconda3libsubprocess.py", line 286, in check\_call
    retcode = call(*popenargs, **kwargs)
  File "C:UsersantonAnaconda3libsubprocess.py", line 267, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:UsersantonAnaconda3libsubprocess.py", line 709, in \_\_init\_\_
    restore\_signals, start\_new\_session)
  File "C:UsersantonAnaconda3libsubprocess.py", line 997, in \_execute\_child
    startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified




Samme problem som her, men der var ikke givet nogen løsning eller hjælp, så jeg troede jeg ville prøve her i stedet.


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


Rådgivning om hvordan man lærer at fejlfinding dette ville blive værdsat.

Bedste reference


Debugged koden og fundet, der ikke kunne finde youtube-dl.


Kontrolleret ekko \%PATH\% og indså jeg havde vej til:


C:...Anaconda3 men ikke til C:...Anaconda3Scripts (this is location of youtube\_dl.exe).


Jeg havde tilføjet denne sti, men ikke genstartet.


Genstartet og nu løst.

Andre referencer 1


Der er en anden nem løsning og ikke brug for Fake\_UserAgent, brug bare andre downloadere, som wget.


Installer frisk edx\_dl.


Hvis du er på Windows download wget, skal du gemme den for eksempel på H-drev. [20]


Skift download\_url funktion som denne:


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)


(Kilde) [21]