使用 python selenium 和 geckodriver 连接被拒绝(操作系统错误 111)

使用 python selenium 和 geckodriver 连接被拒绝(操作系统错误 111)

我对网络抓取不熟悉,我正在 debian buster 和 firefox geckodriver 上使用 python 构建个人应用程序,如下所示,服务器在线

firefox_binary = FirefoxBinary('/usr/bin/firefox')
opts = FirefoxOptions()
opts.add_argument("--headless")
driver = webdriver.Firefox(options=opts, firefox_binary=firefox_binary)
driver.get(url)

我的目标是通过网页中的 ajax 调用来触发此应用程序,它是一个 nginx 服务器,因此在 php exec 命令中调用 py 脚本:

exec ('/usr/bin/python3 webdriver.py');

如果我登录 root 或其他用户,它在 debian 的命令行中工作正常。当我使用 Web 界面调用脚本时,用户是 www-data 并且遇到此错误:连接被拒绝(操作系统错误 111)

我已经在所有我能找到的互联网资源中搜索了三天,并尝试了所有我能做的,但目前还没有任何解决方案

您知道解决这个问题的方法吗?

编辑 :

  • 硒版本 3.141.0

  • Mozilla 火狐 78.8.0esr

  • 壁虎驱动程序 0.29

  • www-data 用户的 geckodriver.log(有错误):

    • 1614703595351 geckodriver INFO 在 127.0.0.1:53899 上收听
    • 1614703595556 mozrunner::runner INFO 运行命令:“/usr/bin/firefox”“--marionette”“--headless”“-foreground”“-no-remote”“-profile”“/tmp/rust_mozprofile22XajP”
    • *** 您正在无头模式下运行。
  • 管理员的 geckodriver.log (没有错误):

    • 1614702846828 geckodriver INFO 在 127.0.0.1:46897 上收听
    • 1614702847019 mozrunner::runner INFO 运行命令:“/usr/bin/firefox”“--marionette”“--headless”“-foreground”“-no-remote”“-profile”“/tmp/rust_mozprofile7jTA4y”
    • *** 您正在无头模式下运行。
    • 1614702859057 Marionette INFO 监听端口 45145
    • 1614702859109 Marionette WARN 此会话将忽略 TLS 证书错误
    • JavaScript 警告:https://........................js?v=1.2.7199.0,第 119 行:return 语句后无法访问代码
    • JavaScript 警告:https://........................js?v=1.2.7199.0,第 119 行:return 语句后无法访问代码
    • 1614702872140 Marionette 警告 TimedPromise 在 500 毫秒后超时:堆栈跟踪:
    • TimedPromise/<@chrome://marionette/content/sync.js:245:13
    • TimedPromise@chrome://marionette/content/sync.js:230:10
    • Interaction.flushEventLoop@chrome://marionette/content/interaction.js:416:10 webdriverClickElement@chrome://marionette/content/interaction.js:182:31
    • 1614702900530 Marionette INFO 已停止侦听端口 45145
  • geckodriver.log 用于 geckodriver 0.21 的 www-data :

    • 1614706982655 geckodriver 信息 geckodriver 0.21.0

    • 1614706982680 geckodriver INFO 在 127.0.0.1:33947 上收听

    • 1614706983553 mozrunner::runner INFO 运行命令:“/usr/bin/firefox”“-marionette”“--headless”“-foreground”“-no-remote”“-profile”“/tmp/rust_mozprofile.p37a7r0syAmR”

    • *** 您正在无头模式下运行。

    • (firefox-esr:22409):dconf-CRITICAL **:17:44:03.845:无法创建目录“/var/www/.cache/dconf”:权限被拒绝。 dconf 将无法正常工作。

答案1

这是权限问题。 www-data 的主目录是 /var/www,通常由 root 拥有。

您可以将 /var/www 赋予 www-data,或者为了限制权限更改,您可以创建 /var/www/.mozilla 并将其所有权更改为 www-data。然后再次尝试运行您的脚本。

似乎正在发生的事情是 Firefox 试图保存用户首选项但失败了。它没有报告错误,也没有完全崩溃其主进程,但仍然受到足够的限制,无法与 geckodriver 进行通信。

来源:https://answers.launchpad.net/ubuntu/+question/695824

答案2

是啊,效果很好,非常感谢

我刚刚创建了以下目录: /var/www/.cache /var/www/.mozilla

我授予 www-data 写入权限。

我想知道这是否没有安全问题。也许应该更好地在其他地方为 mozilla 指定一个工作目录..

答案3

主要问题是.cache文件.mozilla夹,它们需要权限。数据在执行脚本的用户的配置文件中生成。

这个解决方案对我有用:

  1. 确定需要保存缓存的用户。就我而言是 www-数据(的用户交响乐团)。我在文件夹里查了一下/tmp/。您可以看到文件夹的所有者,例如 /tmp/Temp-276cddf8-d7c5-4a09...这些文件夹是由 Firefox 生成的。
  2. 用户需要bash权限,所以你必须将文件
    /etc/passwd从 调整www-data:33:33:www-data:/usr/sbin:/usr/sbin/nologinwww-data:x:33:33:www-data:**/var/www**:**/bin/bash**
  3. 在路径中创建文件夹,在我的例子中是/var/www/(该路径位于文件中指定的用户路径中/etc/passwd)。

mkdir /var/www/.cache

mkdir /var/www/.mozilla

chown www-data:www-data .cache

chown www-data:www-data .mozilla


@sdragnev 回答正确,但就我而言,我仍然需要向用户授予 bash 权限。

相关内容