带有jupyter笔记本的Mac上的phantomjs问题 [英] phantomjs issue on mac with jupyter notebook
问题描述
我正在尝试使用在存储库中找到的一些代码
I’m trying to experiment with some code I found at the repo
https://github.com/AlbanyCompSci/aeries-api
基本上是为了帮助我登录到这个名为aeries的年级门户网站,并提高我的孩子的高中成绩.但是我不断收到与"phantomjs"有关的错误.同样,在抛出关于chrome的错误之前,它必须是无头的.
basically to help me login in to this grade portal called aeries and pull my kids high school grades. But I keep getting errors related to "phantomjs". Also before it was throwing an error about chrome needing to be headless.
下面有一些示例,这些示例是从本地目录加载模块的,并添加了一些代码来尝试解决错误.我正在使用python 3.6在jupyter笔记本中的Mac上运行它.任何提示都将不胜感激.
I’ve got some examples below where I’m loading the module from a local directory and I’ve added the some code to try to resolve the errors. I’m running it on a mac in a jupyter notebook with python 3.6. Any tips greatly appreciated.
代码:
import pandas as pd
import numpy as np
import Main as m
import Gradebooks as Gb
import GradebookDetails as GD
import Assignments as Ag
import AeriesSession as Ar
# below added to try to resolve phantomjs errors
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('headless')
driver = webdriver.PhantomJS(executable_path='/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe')
警告:
/Users/username/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
错误:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/common/service.py in start(self)
75 stderr=self.log_file,
---> 76 stdin=PIPE)
77 except TypeError:
~/anaconda/envs/py36/lib/python3.6/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)
708 errread, errwrite,
--> 709 restore_signals, start_new_session)
710 except:
~/anaconda/envs/py36/lib/python3.6/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
1343 err_msg += ': ' + repr(err_filename)
-> 1344 raise child_exception_type(errno_num, err_msg, err_filename)
1345 raise child_exception_type(err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe': '/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe'
During handling of the above exception, another exception occurred:
WebDriverException Traceback (most recent call last)
<ipython-input-1-653e61cc9221> in <module>()
14 options.add_argument('headless')
15
---> 16 driver = webdriver.PhantomJS(executable_path='/Users/username/Desktop/Stuff/Aeries/api_version/phantomjs-2.1.1-macosx/bin/phantomjs.exe')
~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py in __init__(self, executable_path, port, desired_capabilities, service_args, service_log_path)
54 service_args=service_args,
55 log_path=service_log_path)
---> 56 self.service.start()
57
58 try:
~/anaconda/envs/py36/lib/python3.6/site-packages/selenium/webdriver/common/service.py in start(self)
81 raise WebDriverException(
82 "'%s' executable needs to be in PATH. %s" % (
---> 83 os.path.basename(self.path), self.start_error_message)
84 )
85 elif err.errno == errno.EACCES:
WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH.
更新:
代码:
import pandas as pd
import numpy as np
import Main as m
import Gradebooks as Gb
import GradebookDetails as GD
import Assignments as Ag
import AeriesSession as Ar
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('headless')
driver = webdriver.Chrome(executable_path=os.path.abspath('/Users/username/Desktop/Stuff/Aeries/api_version/chromedriver'), chrome_options=chrome_options)
driver.set_window_size(1120, 550)
driver.get("duckduckgo.com/")
driver.find_element_by_id('search_form_input_homepage').send_keys('realpython')
driver.find_element_by_id('search_button_homepage').click()
print(driver.current_url)
driver.quit()
错误:
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-6-48f57c808807> in <module>()
17 #downlod Chrome driver.exe
18
---> 19 driver = webdriver.Chrome(executable_path=os.path.abspath('/Users/username/Desktop/Stuff/Aeries/api_version/chromedriver'), chrome_options=chrome_options)
20
21 driver.set_window_size(1120, 550)
NameError: name 'chrome_options' is not defined
推荐答案
此错误消息...
WebDriverException: Message: 'phantomjs.exe' executable needs to be in PATH.
...表示在指定位置找不到 phantomjs.exe .
...implies that the phantomjs.exe was not found in the specified location.
似乎有些混乱,如下所示:
There seems to be a bit of messup as follows:
- PhantomJS浏览器 本身是一款无头网页浏览器,可使用JavaScript编写脚本,该脚本可在 Windows , macOS , Linux 和 FreeBSD .因此,您不需要显式传递参数 headles ,就可以删除它.
- 您没有提及底层的操作系统.
- 如果您使用的是 Linux 64位操作系统,则需要从phantomjs-2.1.1-linux-x86_64.tar.bz2 >下载PhantomJS ,提取二进制文件,并提及 phantomjs 二进制文件的绝对路径,您需要去除扩展部分(即
.exe
) - 如果您使用的是 Linux 32位操作系统,则需要从phantomjs-2.1.1-linux-i686.tar.bz2 >下载PhantomJS ,解压缩二进制文件,同时提及 phantomjs 二进制文件的绝对路径,您需要去除扩展部分(即
.exe
) - 如果您使用的是 Mac OS X ,则需要从下载PhantomJS ,提取二进制文件,同时提及 phantomjs 二进制文件的绝对路径,您需要去除扩展部分(即
.exe
) - 如果您使用的是 Windows操作系统,则需要从下载
phantomjs-2.1.1-linux-x86_64.tar.bz2
PhantomJS ,提取二进制文件,并提及 phantomjs 二进制文件的路径,您需要提供包括扩展名(即phantomjs.exe
) 的绝对路径.
- PhantomJS Browser itself is a headless web browser scriptable with JavaScript which can run on Windows, macOS, Linux, and FreeBSD. So you don't need to explicitly pass the argument headles and you can remove it.
- You havn't mentioned about the underlying Operating System.
- If you are on Linux 64 bit OS you need to download the
phantomjs-2.1.1-linux-x86_64.tar.bz2
from Download PhantomJS, extract the binary and while mentioning the absolute path of the phantomjs binary you need to strip off the extension part (i.e..exe
) - If you are on Linux 32 bit OS you need to download the
phantomjs-2.1.1-linux-i686.tar.bz2
from Download PhantomJS , extract the binary and while mentioning the absolute path of the phantomjs binary you need to strip off the extension part (i.e..exe
) - If you are on Mac OS X you need to download the
phantomjs-2.1.1-macosx.zip
from Download PhantomJS , extract the binary and while mentioning the absolute path of the phantomjs binary you need to strip off the extension part (i.e..exe
) - If you are on Windows OS you need to download the
phantomjs-2.1.1-linux-x86_64.tar.bz2
from Download PhantomJS , extract the binary and while mentioning the path of the phantomjs binary you need to provide the absolute path including the extension (i.e.phantomjs.exe
)
尽管您看到了弃用通知,但支持仍然存在.因此暂时您可以忽略该错误:
Though you observe the deprecation notice but the support is still there. So for the time being you can ignore the error:
C:\Python\lib\site-packages\selenium\webdriver\phantomjs\webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
- If you are on Linux 64 bit OS you need to download the
-
在 Windows8 系统上,这是工作代码:
On Windows8 system here is the working code:
from selenium import webdriver driver = webdriver.PhantomJS(executable_path=r'C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe') driver.get('https://www.google.com/') print(driver.title) driver.quit()
-
控制台输出:
Console Output:
C:\Python\lib\site-packages\selenium\webdriver\phantomjs\webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless ' Google
这篇关于带有jupyter笔记本的Mac上的phantomjs问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
- 如果您使用的是 Linux 64位操作系统,则需要从phantomjs-2.1.1-linux-x86_64.tar.bz2 >下载PhantomJS ,提取二进制文件,并提及 phantomjs 二进制文件的绝对路径,您需要去除扩展部分(即