import os
import subprocess
import tempfile
+import urllib.parse
-from ..compat import compat_urlparse
from ..utils import (
ExtractorError,
Popen,
This class is experimental.
"""
+ INSTALL_HINT = 'Please download it from https://phantomjs.org/download.html'
+
_BASE_JS = R'''
phantom.onError = function(msg, trace) {{
var msgStack = ['PHANTOM ERROR: ' + msg];
self.exe = check_executable('phantomjs', ['-v'])
if not self.exe:
- raise ExtractorError(
- 'PhantomJS not found, Please download it from https://phantomjs.org/download.html', expected=True)
+ raise ExtractorError(f'PhantomJS not found, {self.INSTALL_HINT}', expected=True)
self.extractor = extractor
if is_outdated_version(version, required_version):
self.extractor._downloader.report_warning(
'Your copy of PhantomJS is outdated, update it to version '
- '%s or newer if you encounter any errors.' % required_version)
+ f'{required_version} or newer if you encounter any errors.')
for name in self._TMP_FILE_NAMES:
tmp = tempfile.NamedTemporaryFile(delete=False)
if 'path' not in cookie:
cookie['path'] = '/'
if 'domain' not in cookie:
- cookie['domain'] = compat_urlparse.urlparse(url).netloc
+ cookie['domain'] = urllib.parse.urlparse(url).netloc
with open(self._TMP_FILES['cookies'].name, 'wb') as f:
- f.write(json.dumps(cookies).encode('utf-8'))
+ f.write(json.dumps(cookies).encode())
def _load_cookies(self):
with open(self._TMP_FILES['cookies'].name, 'rb') as f:
if not html:
html = self.extractor._download_webpage(url, video_id, note=note, headers=headers)
with open(self._TMP_FILES['html'].name, 'wb') as f:
- f.write(html.encode('utf-8'))
+ f.write(html.encode())
self._save_cookies(url)
'jscode': jscode,
}))
- stdout = self.execute(jscode, video_id, note2)
+ stdout = self.execute(jscode, video_id, note=note2)
with open(self._TMP_FILES['html'].name, 'rb') as f:
html = f.read().decode('utf-8')
except Exception as e:
raise ExtractorError(f'{note} failed: Unable to run PhantomJS binary', cause=e)
if returncode:
- raise ExtractorError(f'{note} failed:\n{stderr.strip()}')
+ raise ExtractorError(f'{note} failed with returncode {returncode}:\n{stderr.strip()}')
return stdout