在docker镜像上开发抓取脚本 - 如何克服缺少可视化浏览器?

时间:2017-12-26 11:01:59

标签: python-3.x docker selenium-webdriver headless-browser

我想从网上抓取信息,之前的尝试告诉我,自从我在mac os x上开发脚本然后在vm上经常运行它时,docker对我的脚本运行会很有用它经常赢得&由于依赖关系不存在于ubuntu上并且已经证明难以构建,因此可以运行。

Docker克服了依赖性问题,但现在这引出了一个不同的问题,我需要在docker图像上以非无头模式开发脚本以查看它正在做什么(或者至少我认为我这样做但是在码头上我不认为可以在非无头模式下运行浏览器。

其他人如何克服这个问题或以其他方式解决这个问题?

我在这张图片上使用python3,selenium @Harald Norgren帮我构建了here

这是我正在运行的那种脚本,但它还没有真正做任何事情,我只是将它包括在内以提供更多有用的背景。

import csv
import time
from selenium import webdriver
import os
import logging #logging.warning(data_store+file)
import json

project_dir = os.path.dirname(os.path.realpath(__file__))
data_store = project_dir+"/trends-data/"
archive_folder = "archive"
data_archive = data_store + archive_folder + "/"

chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument("--headless")
prefs = {"download.default_directory" : data_store}
chromeOptions.add_experimental_option("prefs",prefs)
driver = webdriver.Chrome(
    project_dir+'/chromedriver',
    chrome_options=chromeOptions
)

driver.get('https://trends.google.co.uk/trends/explore?q=query');
time.sleep(5)
driver.find_element_by_class_name("ic_googleplus_reshare").click()
time.sleep(5)
driver.find_element_by_class_name("csv-image").click()
time.sleep(5)
driver.quit()

1 个答案:

答案 0 :(得分:0)

首先在带有Chrome的python3 venv中本地开发脚本,然后在完成视觉抓取后可以使用Docker运行它以避免任何依赖性问题。

此外,对于Docker运行无头Chrome,在chromeOptions中也添加以下参数:

chromeOptions.add_argument("no-sandbox")