Chromedriver 需要在文件对象的路径 set_nonblocking() 中可用,并且没有 ChromeDri



我设置了一个芹菜环境并发布了两个任务。一种是打开谷歌浏览器,另一种是简单的加法计算。加法计算功能没有问题,但是打开浏览器的功能报错,无法打开浏览器。

错误:

文件 "d:\software\professional\python27\lib\site-packages\selenium\webdriver\common\service.py", 第 95 行,在开始 (os.path.basename(self.path(, self.start_error_message, str(e(((WebDriver异常:消息:可执行的chromedriver需要 在路径中可用。请看 https://sites.google.com/a/chromium.org/chromedriver/home set_nonblocking( 在没有 setblocking(( 方法的文件对象上 (Windows 管道不支持非阻塞 I/O(

在此处输入图像描述

我的代码:(tasks.py(

# -*- coding:utf-8 -*-
from selenium import webdriver
import time
from proj.celery import app
import os

@app.task
def chrome_test():
chrome_options = webdriver.ChromeOptions()
driver_path1 = r"chromedriver"  
driver_path2 = os.path.join(r"D:SoftWareProfessionalChromeDriver", "chromedriver.exe")
# print "try to open chrome..."
driver = webdriver.Chrome(executable_path=driver_path1, options=chrome_options)
# executable_path=driver_path, options=chrome_options
print "open chrome success"
driver.get("https://www.baidu.com/")
time.sleep(1)
print driver
driver.close()
return "success to open chrome..."

@app.task
def add(x, y):
time.sleep(1)
return x+y

if __name__ == "__main__":
chrome_test()

但是如果我单独运行该功能,它可以很好地工作。

此错误消息...

File "d:softwareprofessionalpython27libsite-packagesseleniumwebdrivercommonservice.py", line 95, in start (os.path.basename(self.path), self.start_error_message, str(e))) 
WebDriverException: Message: The executable chromedriver needs to be available in the path. Please see https://sites.google.com/a/chromium.org/chromedriver/home set_nonblocking() on a file object with no setblocking() method (Windows pipes don't support non-blocking I/O)

。意味着您的程序在尝试启动/生成新的浏览上下文(即 Chrome 浏览器会话(时无法找到ChromeDriver


在代码块中,您使用了:

driver = webdriver.Chrome(executable_path=driver_path1, options=chrome_options)

哪里

driver_path1 = r"chromedriver"

因此,您的程序找不到chromedriver .exe


溶液

您需要提及ChromeDriver绝对路径,如下所示:

driver = webdriver.Chrome(executable_path=r'D:SoftWareProfessionalChromeDriverchromedriver.exe', options=chrome_options)

或者,使用os.path.join()您可以使用:

driver_path2 = os.path.join(r"D:SoftWareProfessionalChromeDriver", "chromedriver.exe")
driver = webdriver.Chrome(executable_path=driver_path2, options=chrome_options)

引用

您可以在以下位置找到一些相关的讨论:

  • selenium.common.exceptions.WebDriverException:消息:"chromedriver"可执行文件需要在无头Chrome的PATH错误中
  • WebDriver异常:消息:"chromedriver"可执行文件需要在PATH中,同时通过Selenium Chromedriver Phyton设置UserAgent。
  • 错误消息:"chromedriver"可执行文件必须是 PATH

TL; DR

对子进程进行非阻塞读取。PIPE in python

我在启动"芹菜"服务时添加了参数"-P eventlet"。我遇到了这个问题,然后我删除了参数,问题就解决了。

celery -A proj worker -l info  -P eventlet   (old)
celery -A proj worker -l info

我怀疑窗口与"-P eventlet"和芹菜之间存在线程问题。具体原因尚不清楚。

相关内容

  • 没有找到相关文章

最新更新