ara*_*lar 5 python selenium selenium-chromedriver docker docker-compose
我正在尝试将peroumal1的"docker-chrome-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
Run Code Online (Sandbox Code Playgroud)
这是我的刮刀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/
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从我的代码中使用Selenium时(见下文),我收到以下错误消息:selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be available in the path. Please look at http://docs.seleniumhq.org/download/#thirdPartyDrivers and read up at 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()
Run Code Online (Sandbox Code Playgroud)
编辑:我也试图用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
Run Code Online (Sandbox Code Playgroud)
而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()
Run Code Online (Sandbox Code Playgroud)
小智 8
我认为这里的问题可能不是Docker,而是代码.Selenium图像通过远程Webdriver为Selenium Server提供了一个接口,并且提供的代码尝试使用chromedriver直接实例化Chrome浏览器,这是Selenium Python绑定可以实现的,前提是可以从环境访问chromedriver.
也许使用文档中的示例可以更好地工作:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6264 次 |
| 最近记录: |