Docker图像与python3,chromedriver,chrome&硒

时间:2017-12-23 19:55:52

标签: python selenium docker selenium-chromedriver

我的目标是用来自docker容器的python驱动的硒刮网。

我环顾四周,找不到安装了以下所有内容的码头图像:

  • python3
  • chromedriver
  • chrome

是否有人能够将我与所有这些安装并协同工作的码头图像链接?

也许建立我自己的并不像我想的那么困难,但到目前为止它已经提到了我。

赞赏任何建议。

3 个答案:

答案 0 :(得分:3)

我喜欢 Harald 的解决方案。 但是,截至 2021 年,我的环境需要进行一些修改。

Docker version 20.10.5, build 55c4c88

我按如下方式更改了 Dockerfile。

FROM selenium/standalone-chrome

USER root
RUN apt-get update && apt-get install python3-distutils -y
RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py
RUN python3 -m pip install selenium

答案 1 :(得分:2)

尝试https://github.com/SeleniumHQ/docker-selenium

安装了python:

$ docker run selenium/standalone-chrome python3 --version
Python 3.5.2

说明书指示您使用

启动它
docker run -d -p 4444:4444 --shm-size=2g selenium/standalone-chrome

修改

为了让selenium能够通过python运行,你需要安装它们。创建此Dockerfile

FROM selenium/standalone-chrome

USER root
RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py
RUN python3 -m pip install selenium

然后你可以用

运行它
docker build . -t selenium-chrome && \
    docker run -it selenium-chrome python3

与普通python泊坞窗图片相比的优势在于,您不需要安装chromedriver本身,因为它来自selenium/standalone-chrome

答案 2 :(得分:0)

我最近使用包含硒的版本更新了此图片:

https://hub.docker.com/r/joyzoursky/python-chromedriver/

它使用python3作为基本图像并安装chromedriver,chrome和selenium(作为pip包)来构建。我自己使用了基于alpine的python3版本,因为图像尺寸较小。

requirements.txt

查看图片是否适合您的情况,因为您可以通过requirements.txt文件将selenium与其他软件包一起安装以构建您自己的图像,或者从Dockerfiles中获取参考资料。

如果您想要从selenium中安装更多的软件包,您可以构建自己的图像,如下例所示:

首先,在您的工作目录中,您可能有selenium==3.8.0 requests==2.18.4 urllib3==1.22 ... (your list of packages) 存储要安装的软件包版本:

FROM joyzoursky/python-chromedriver:3.6-alpine3.7

RUN mkdir packages
ADD requirements.txt packages
RUN pip install -r packages/requirements.txt

然后在相同的目录中创建Dockerfile,如下所示:

docker build -t yourimage .

然后构建图像:

$(function (){
var $article_table = $('#article_table');
$.ajax({
    type: 'GET',
    dataType: 'json',
    url: '/articles',
    success: function(articles){
        $.each(articles, function(i, article) {
            $article_table.append('<tr><td>'+article.name+'</td></tr>')
        });
    }
});
$('#form_article').submit(function(){
    //var name = $('#article_name').val();
    var name = JSON.parse(xhr.responseText);
    $.ajax({
        type: 'POST',
        url: '/articles',
        dataType: 'json',
        data: name,
        success: function(data){
            //alert(data.id);
            console.log('success',data);
            //debugger;
        },
        error: function(){

        }
    });
});

这与selenium官方的不同,因为selenium作为pip包安装到python基础映像。然而,它由个人(我自己)主持,因此可能有更高的停止维护的风险。