Я пытаюсь построить скребок, и я столкнулся с проблемой, когда пытался разделить код на несколько модулей, чтобы создать свой собственный пакет. Дело в том, что я могу легко создать экземпляр chrome веб-драйвера с селеном, когда это явно сделано в основном скрипте, но когда я пытаюсь сделать это из импортированного модуля, я получаю следующую ошибку:
selenium.common.exceptions.WebDriverException: Сообщение: неизвестная ошибка: не удается найти Chrome двоичный файл (информация о драйвере: chromedriver = 2.37.544315 (730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7), платформа = Linux 4.15.0-88-x64) *
Если быть более точным, допустим, у меня есть мой хромированный драйвер и мой безголовый хром в той же папке / var / task / bin , вот что работает:
from selenium import webdriver
class ScraperTmp(object):
def __init__(
self
):
self.site = None
def get_driver(self, chromedriver_folder):
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280x1696')
chrome_options.add_argument('--user-data-dir=/tmp/user-data')
chrome_options.add_argument('--hide-scrollbars')
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')
chrome_options.add_argument('--v=99')
chrome_options.add_argument('--single-process')
chrome_options.add_argument('--data-path=/tmp/data-path')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--homedir=/tmp')
chrome_options.add_argument('--disk-cache-dir=/tmp/cache-dir')
chrome_options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
chrome_options.binary_location = chromedriver_folder + "/headless-chromium"
chromedriver_path = chromedriver_folder + "/chromedriver"
self.driver = webdriver.Chrome(chromedriver_path, chrome_options=chrome_options)
scraper_tmp = ScraperTmp()
scraper_tmp.get_driver("/var/task/bin")
НО, когда у меня есть тот же класс в другом файле и я пытаюсь импортировать его следующим образом:
from scrap import Scrapertmp
scraper_tmp = ScraperTmp()
scraper_tmp.get_driver("/var/task/bin")
Тогда у меня есть предыдущая ошибка. Я должен добавить, что у меня предыдущая ошибка, только когда я запускаю этот код внутри docker, который имитирует aws лямбда-функцию. Когда я запускаю этот код из ноутбука Jupyter, не появляется никаких ошибок, НО появляется окно chrome.
Это что-то, что я могу исправить?
Я попытался удалить все chrome_options, это не ничего не изменить.