PermissionError: Permission denied: 'geckodriver.log' when using Selenium to open Firefox
PermissionError: Permission denied: 'geckodriver.log' when using Selenium to open Firefox
我正在研究使无聊的东西自动化的第 11 章,我正在尝试跟进涉及 Selenium 的示例。我正在使用带有 Python 3.9.1 64 位以及 Visual Studio 背景代码的 MacBook Air。我在使用这段代码时遇到了很多问题:
from selenium import webdriver
browser=webdriver.Firefox()
根据我的研究,为了执行上面的代码,我需要同时安装 selenium 和 geckodriver。我发现一个网站很好地列出了一些说明:https://medium.com/dropout-analytics/selenium-and-geckodriver-on-mac-b411dbfe61bc.
根据上述网站上的说明,我去了:https://github.com/mozilla/geckodriver/releases 并下载了 'geckodriver-v0.30.0-macos.tar.gz' 和 'geckodriver-v0.30.0-linux64.tar.gz'(我不确定哪个版本适合我的情况).我回到终端 window 和 运行 sudo nano /etc/paths
并按照说明将 /usr/local/bin/geckodriver
和 /Users/myname/Downloads/geckodriver
添加到系统路径。
然后我再次尝试第一个代码,遇到以下错误消息(编辑:我忘了提到 Firefox 浏览器没有按预期打开):
>>> from selenium import webdriver
>>> browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/homebrew/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in __init__
self.service = Service(
File "/opt/homebrew/lib/python3.9/site-packages/selenium/webdriver/firefox/service.py", line 50, in __init__
log_file = open(log_path, "a+") if log_path else None
PermissionError: [Errno 13] Permission denied: 'geckodriver.log'
这才是我真正不知所措的地方。我假设错误告诉我 'geckodriver.log' 需要移动到另一个我有权使用它的目录 (/usr/local/bin??) 但我在尝试这样做时遇到了错误。
import shutil
>>> shutil.move('/Users/myname/geckodriver.log', '/usr/local/bin')
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 806, in move
os.rename(src, real_dst)
PermissionError: [Errno 13] Permission denied: '/Users/atsushiidobe/geckodriver.log' -> '/usr/local/bin/geckodriver.log'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 820, in move
copy_function(src, real_dst)
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 435, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: '/usr/local/bin/geckodriver.log'
如果有人对如何解决这个问题有任何建议,我将不胜感激。我看了很多关于如何安装 geckodriver 的 YouTube 视频和在线帖子,但我还没有设法解决这个问题。
选项 1
正确安装 geckodriver 的快速方法是使用 homebrew,而无需手动安装所有内容而对体系结构大惊小怪:
转到 https://brew.sh/ 并安装自制软件。
然后,您应该可以运行执行以下命令:
brew install geckodriver
这会将 geckodriver 二进制文件安装到 $PATH 上的某个位置(默认情况下,/usr/local/bin
)。
让我们确保我们拥有正确版本的二进制文件:
如果您有一台 MacOS 计算机,时间约为 2006-2020 年,则您有一台英特尔 Mac。
如果你有一台 ~2020+ 的 MacOS 电脑,你有一台 M1 Mac,也就是 arm64 或 aarch64 mac
如果你有英特尔 Mac:
运行 以下,它应该打印出来:
$ file /usr/local/bin/geckodriver
/usr/local/bin/geckodriver: Mach-O 64-bit executable x86_64
使用 M1 Mac:
$ file /usr/local/bin/geckodriver
/usr/local/bin/geckodriver: Mach-O 64-bit executable arm64
太好了,如果成功了,我们就有了正确版本的二进制文件。
要 运行 selenium,您必须安装它(我想您已经安装了,但如果您还没有安装,运行 pip3 install selenium
)。
然后运行下面的代码:
from selenium import webdriver
browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
<stdin>:1: DeprecationWarning: executable_path has been deprecated, please pass in a Service object # Browser opens. Ignore this warning, it doesn't really matter.
它应该打印弃用警告,但这并不重要。
选项 2
不然,你可以在架构上大惊小怪:
让我们转到 geckodriver 的发布页面:
https://github.com/mozilla/geckodriver/releases/latest
下载有几种选择:
Linux(32|64) 表示 linux 32 位或 linux 64 位。在 MacOS 上,这并不重要,所以让我们忽略这些。
geckodriver-v0.30.0-linux32.tar.gz
geckodriver-v0.30.0-linux32.tar.gz.asc
geckodriver-v0.30.0-linux64.tar.gz
geckodriver-v0.30.0-linux64.tar.gz.asc
这些是 MacOS,让我们看看这些:
geckodriver-v0.30.0-macos-aarch64.tar.gz
geckodriver-v0.30.0-macos.tar.gz
Win32 和 Win64 适用于 windows,所以我们也忽略它们。
geckodriver-v0.30.0-win32.zip
geckodriver-v0.30.0-win64.zip
同上,注意你的MacOS是什么架构运行ning.
如果您有英特尔 mac,请下载并取消存档 geckodriver-v0.30.0-macos.tar.gz
。
如果您有 arm64 mac,请下载并解压缩 geckodriver-v0.30.0-macos-aarch64.tar.gz
.
之后,(我假设二进制文件在 ~/Downloads
中):
将其从 ~/Downloads
移动到 $PATH 中的某处,例如 /usr/local/bin
.
$ mv ~/Downloads/geckodriver /usr/local/bin
现在 geckodriver 已在您的 $PATH 中。
要 运行 selenium,您必须安装它(我想您已经安装了,但如果您还没有安装,运行 pip3 install selenium
)。
然后运行下面的代码:
from selenium import webdriver
browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
<stdin>:1: DeprecationWarning: executable_path has been deprecated, please pass in a Service object # Browser opens. Ignore this warning, it doesn't really matter.
它应该打印弃用警告,但这并不重要。
我正在研究使无聊的东西自动化的第 11 章,我正在尝试跟进涉及 Selenium 的示例。我正在使用带有 Python 3.9.1 64 位以及 Visual Studio 背景代码的 MacBook Air。我在使用这段代码时遇到了很多问题:
from selenium import webdriver
browser=webdriver.Firefox()
根据我的研究,为了执行上面的代码,我需要同时安装 selenium 和 geckodriver。我发现一个网站很好地列出了一些说明:https://medium.com/dropout-analytics/selenium-and-geckodriver-on-mac-b411dbfe61bc.
根据上述网站上的说明,我去了:https://github.com/mozilla/geckodriver/releases 并下载了 'geckodriver-v0.30.0-macos.tar.gz' 和 'geckodriver-v0.30.0-linux64.tar.gz'(我不确定哪个版本适合我的情况).我回到终端 window 和 运行 sudo nano /etc/paths
并按照说明将 /usr/local/bin/geckodriver
和 /Users/myname/Downloads/geckodriver
添加到系统路径。
然后我再次尝试第一个代码,遇到以下错误消息(编辑:我忘了提到 Firefox 浏览器没有按预期打开):
>>> from selenium import webdriver
>>> browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/homebrew/lib/python3.9/site-packages/selenium/webdriver/firefox/webdriver.py", line 170, in __init__
self.service = Service(
File "/opt/homebrew/lib/python3.9/site-packages/selenium/webdriver/firefox/service.py", line 50, in __init__
log_file = open(log_path, "a+") if log_path else None
PermissionError: [Errno 13] Permission denied: 'geckodriver.log'
这才是我真正不知所措的地方。我假设错误告诉我 'geckodriver.log' 需要移动到另一个我有权使用它的目录 (/usr/local/bin??) 但我在尝试这样做时遇到了错误。
import shutil
>>> shutil.move('/Users/myname/geckodriver.log', '/usr/local/bin')
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 806, in move
os.rename(src, real_dst)
PermissionError: [Errno 13] Permission denied: '/Users/atsushiidobe/geckodriver.log' -> '/usr/local/bin/geckodriver.log'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 820, in move
copy_function(src, real_dst)
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 435, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "/opt/homebrew/Cellar/python@3.9/3.9.1_2/Frameworks/Python.framework/Versions/3.9/lib/python3.9/shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: '/usr/local/bin/geckodriver.log'
如果有人对如何解决这个问题有任何建议,我将不胜感激。我看了很多关于如何安装 geckodriver 的 YouTube 视频和在线帖子,但我还没有设法解决这个问题。
选项 1
正确安装 geckodriver 的快速方法是使用 homebrew,而无需手动安装所有内容而对体系结构大惊小怪:
转到 https://brew.sh/ 并安装自制软件。
然后,您应该可以运行执行以下命令:
brew install geckodriver
这会将 geckodriver 二进制文件安装到 $PATH 上的某个位置(默认情况下,/usr/local/bin
)。
让我们确保我们拥有正确版本的二进制文件:
如果您有一台 MacOS 计算机,时间约为 2006-2020 年,则您有一台英特尔 Mac。 如果你有一台 ~2020+ 的 MacOS 电脑,你有一台 M1 Mac,也就是 arm64 或 aarch64 mac
如果你有英特尔 Mac:
运行 以下,它应该打印出来:
$ file /usr/local/bin/geckodriver
/usr/local/bin/geckodriver: Mach-O 64-bit executable x86_64
使用 M1 Mac:
$ file /usr/local/bin/geckodriver
/usr/local/bin/geckodriver: Mach-O 64-bit executable arm64
太好了,如果成功了,我们就有了正确版本的二进制文件。
要 运行 selenium,您必须安装它(我想您已经安装了,但如果您还没有安装,运行 pip3 install selenium
)。
然后运行下面的代码:
from selenium import webdriver
browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
<stdin>:1: DeprecationWarning: executable_path has been deprecated, please pass in a Service object # Browser opens. Ignore this warning, it doesn't really matter.
它应该打印弃用警告,但这并不重要。
选项 2
不然,你可以在架构上大惊小怪:
让我们转到 geckodriver 的发布页面:
https://github.com/mozilla/geckodriver/releases/latest
下载有几种选择:
Linux(32|64) 表示 linux 32 位或 linux 64 位。在 MacOS 上,这并不重要,所以让我们忽略这些。
geckodriver-v0.30.0-linux32.tar.gz
geckodriver-v0.30.0-linux32.tar.gz.asc
geckodriver-v0.30.0-linux64.tar.gz
geckodriver-v0.30.0-linux64.tar.gz.asc
这些是 MacOS,让我们看看这些:
geckodriver-v0.30.0-macos-aarch64.tar.gz
geckodriver-v0.30.0-macos.tar.gz
Win32 和 Win64 适用于 windows,所以我们也忽略它们。
geckodriver-v0.30.0-win32.zip
geckodriver-v0.30.0-win64.zip
同上,注意你的MacOS是什么架构运行ning.
如果您有英特尔 mac,请下载并取消存档 geckodriver-v0.30.0-macos.tar.gz
。
如果您有 arm64 mac,请下载并解压缩 geckodriver-v0.30.0-macos-aarch64.tar.gz
.
之后,(我假设二进制文件在 ~/Downloads
中):
将其从 ~/Downloads
移动到 $PATH 中的某处,例如 /usr/local/bin
.
$ mv ~/Downloads/geckodriver /usr/local/bin
现在 geckodriver 已在您的 $PATH 中。
要 运行 selenium,您必须安装它(我想您已经安装了,但如果您还没有安装,运行 pip3 install selenium
)。
然后运行下面的代码:
from selenium import webdriver
browser=webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
<stdin>:1: DeprecationWarning: executable_path has been deprecated, please pass in a Service object # Browser opens. Ignore this warning, it doesn't really matter.
它应该打印弃用警告,但这并不重要。