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.

它应该打印弃用警告,但这并不重要。