├── Dockerfile └── README.md /Dockerfile: -------------------------------------------------------------------------------- 1 | # Selenium + Chrome 2 | 3 | FROM alpine:3.4 4 | MAINTAINER leafney "babycoolzx@126.com" 5 | 6 | # 更新软件源 7 | RUN echo "http://dl-4.alpinelinux.org/alpine/v3.4/main" >> /etc/apk/repositories && \ 8 | echo "http://dl-4.alpinelinux.org/alpine/v3.4/community" >> /etc/apk/repositories 9 | 10 | 11 | RUN apk update && \ 12 | apk add python py-pip curl unzip libexif udev chromium chromium-chromedriver xvfb && \ 13 | pip install selenium && \ 14 | pip install pyvirtualdisplay 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### 说明 2 | 3 | Alpine:v3.4 + Selenium + Chrome 4 | 5 | #### 创建镜像 6 | 7 | ``` 8 | $ docker build -t="leafney/alpine-selenium-chrome" . 9 | ``` 10 | 11 | #### 创建一个容器进行测试 12 | 13 | ``` 14 | $ docker run -it --name alsech leafney/alpine-selenium-chrome /bin/sh 15 | ``` 16 | 17 | #### 拷贝py程序到容器中 18 | 19 | ``` 20 | $ docker cp chrome.py alsech:/root 21 | ``` 22 | 23 | #### Size 24 | 25 | leafney/alpine-selenium-chrome latest 272.8 MB 26 | 27 | *** 28 | 29 | #### Selenium + Chrome Demo 30 | 31 | `chrome.py` 32 | 33 | ``` 34 | # coding:utf-8 35 | import time 36 | from selenium import webdriver 37 | from pyvirtualdisplay import Display 38 | 39 | display = Display(visible=0, size=(800, 800)) 40 | display.start() 41 | 42 | driver = webdriver.Chrome() 43 | 44 | driver.get('http://www.cnblogs.com/') 45 | time.sleep(5) 46 | 47 | title = driver.title 48 | print(title.encode('utf-8')) 49 | 50 | # html=driver.page_source 51 | # print(html) 52 | 53 | # Release memory 54 | driver.close() 55 | driver.quit() 56 | display.stop() 57 | ``` 58 | 59 | **Something Important** 60 | 61 | If you run the `chrome.py` file has error: 62 | 63 | ``` 64 | Message: unknown error: Chrome failed to start: crashed 65 | ``` 66 | 67 | And run `chromium-browser` has following error: 68 | 69 | ``` 70 | # chromium-browser 71 | Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted 72 | ``` 73 | 74 | Then to use the following method to solved it: 75 | 76 | `chrome_fix.py` 77 | 78 | ``` 79 | # coding:utf-8 80 | import time 81 | from selenium import webdriver 82 | from selenium.webdriver.chrome.options import Options 83 | from pyvirtualdisplay import Display 84 | 85 | display = Display(visible=0, size=(800, 800)) 86 | display.start() 87 | 88 | chrome_options = Options() 89 | chrome_options.add_argument("--no-sandbox") 90 | driver = webdriver.Chrome(chrome_options=chrome_options) 91 | 92 | driver.get('http://www.cnblogs.com/') 93 | time.sleep(5) 94 | 95 | title = driver.title 96 | print(title.encode('utf-8')) 97 | 98 | # html=driver.page_source 99 | # print(html) 100 | 101 | # Release memory 102 | driver.close() 103 | driver.quit() 104 | display.stop() 105 | 106 | ``` 107 | 108 | Details view: [google-chrome fails to start in docker](https://github.com/wechaty/wechaty/issues/26) 109 | --------------------------------------------------------------------------------