OSError:在Docker容器中使用python运行selenium时

我最近学习了Docker的基础知识,以及如何创build和运行图像。 我正在尝试创build一个python脚本的图像,这个脚本会将一些数据页面抓取并上传到服务器。 我使用Selenium,Chromium和Windows chromedriver。 我试图在我的Windows机器上构build映像,并能够将它部署在一堆Linux / Windows服务器上。 目前,我只是在同一个Windows机器上构build和运行,直到我运行,但是我仍然得到相同的错误,即使脚本直接在机器上运行。

这是错误的:

Traceback (most recent call last): File "my-app.py", line 796, in <module> startScraper(); File "my-app.py", line 92, in startScraper browser = webdriver.Chrome(chrome_options = options, executable_path = path_to_chromedriver); File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 62, in __init__ self.service.start() File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/common/service.py", line 74, in start stdout=self.log_file, stderr=self.log_file) File "/usr/local/lib/python3.6/subprocess.py", line 707, in __init__ restore_signals, start_new_session) File "/usr/local/lib/python3.6/subprocess.py", line 1326, in _execute_child raise child_exception_type(errno_num, err_msg) OSError: [Errno 8] Exec format error 

它似乎与铬选项有关,但即使我删除所有“添加参数”选项,错误仍然存​​在,但这里是选项:

 options = webdriver.ChromeOptions(); options.binary_location = './chrome-win32/chrome.exe'; options.add_argument('headless') options.add_argument('window-size=1400x1300') options.add_argument('--mute-audio') options.add_argument('--disable-web-security'); options.add_argument('--allow-running-insecure-content'); options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-ssl-errors') prefs = {"profile.managed_default_content_settings.images":2} options.add_experimental_option("prefs", prefs); path_to_chromedriver = './chromedriver.exe'; 

有没有什么,我错过了能够在一个容器中运行这个刮刀? 谢谢!

编辑:我忘了添加Dockerfile和我如何生成/运行图像:

Dockerfile:

 FROM python:3.6.0 WORKDIR /my-app ADD . /my-app RUN pip install -r requirements.txt ENV NAME Scraper CMD ["python", "My_App.py"] 

构build/运行图像: – dockerbuild设-t myapp – docker运行myapp

也许有一些我不知道我失踪的选项?

你正试图在一个Linux容器中运行一个exe文件,这是行不通的。 您将需要在您的Dockerfile中安装chrome和chromedriver,并更新代码以使用正确的path

 FROM python:3.6.0 RUN apt update && apt install -y chromedriver WORKDIR /my-app ADD . /my-app RUN pip install -r requirements.txt ENV NAME Scraper CMD ["python", "My_App.py"] 

改变你的代码

 options = webdriver.ChromeOptions(); options.add_argument('headless') options.add_argument('window-size=1400x1300') options.add_argument('--mute-audio') options.add_argument('--disable-web-security'); options.add_argument('--allow-running-insecure-content'); options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-ssl-errors') prefs = {"profile.managed_default_content_settings.images":2} options.add_experimental_option("prefs", prefs); path_to_chromedriver = '/usr/lib/chromium/chromedriver';