我正在尝试将peroumal1的“docker-chrome-selenium”容器与使用Selenium的爬取代码的另一个容器进行链接。
他将其容器暴露到端口4444(Selenium的默认端口),但我无法从我的爬虫容器访问它。这是我的
当我尝试从我的代码中使用Selenium时(见下文),我却收到以下错误信息:
他将其容器暴露到端口4444(Selenium的默认端口),但我无法从我的爬虫容器访问它。这是我的
docker-compose
文件:chromedriver:
image: eperoumalnaik/docker-chrome-selenium:latest
scraper:
build: .
command: python manage.py scrapy crawl general_course_content
volumes:
- .:/code
ports:
- "8000:8000"
links:
- chromedriver
这是我的爬虫Dockerfile:
FROM python:2.7
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
ADD . /code/
当我尝试从我的代码中使用Selenium时(见下文),我却收到以下错误信息:
selenium.common.exceptions.WebDriverException: Message: 'chromedriver'可执行文件需要在路径中可用。请查看http://docs.seleniumhq.org/download/#thirdPartyDrivers并在http://code.google.com/p/selenium/wiki/ChromeDriver上阅读相关内容
。在Mac OS X上,当我没有使用Docker时,我通过下载chromedriver
二进制文件并将其添加到路径中来解决这个问题,但我不知道在这里该怎么做。driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://google.com')
driver.close()
编辑:我也尝试使用Selenium官方镜像来完成这个任务,不幸的是,它也没有成功(出现了同样要求chromedriver二进制文件的错误信息)。
在Python代码中需要做些什么吗?
谢谢!
更新:正如@peroumal1所说,问题在于我没有使用Selenium连接到远程驱动程序。然而,在我连接之后,我遇到了连接问题(urllib2.URLError: <urlopen error [Errno 111] Connection refused>
),直到我修改了Selenium驱动程序连接的IP地址(当使用boot2docker
时,您必须连接到虚拟机的IP地址,而不是您计算机的localhost,您可以通过输入boot2docker ip
找到),并更改了docker-compose
文件。这就是我最终得到的结果:
chromedriver:
image: selenium/standalone-chrome
ports:
- "4444:4444"
scraper:
build: .
command: python manage.py scrapy crawl general_course_content
volumes:
- .:/code
ports:
- 8000:8000
links:
- chromedriver
以下是与编程有关的 Python 代码(我的计算机上 boot2docker
的 IP 地址为 192.168.59.103
):
driver = webdriver.Remote(
command_executor='http://192.168.59.103:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver.maximize_window()
driver.get('http://google.com')
driver.close()
docker exec -it container_id env
命令检查您的路径,它会显示什么? - user2915097