通过本地气流部署上的DAG导入Selenium时出现“chromedriver意外退出”

dohp0rv5  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在尝试使用运行在本地机器上的Airflow来编排ETL管道。我正在使用apache.airflow网页上的“标准”docker-compose.yaml文件(此文件为:https://airflow.apache.org/docs/apache-airflow/2.4.3/docker-compose.yaml),我唯一的改动是将我的本地文件系统的一部分挂载到docker上,并使用一个自定义映像来允许安装一些python库(如selenium)。
收到DAG导入错误:

Broken DAG: [/opt/airflow/dags/brand_delta/my_dags/amazon_italy_dag.py] Traceback (most recent call last):
  File "/home/airflow/.local/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 106, in start
    self.assert_process_still_running()
  File "/home/airflow/.local/lib/python3.7/site-packages/selenium/webdriver/common/service.py", line 119, in assert_process_still_running
    raise WebDriverException(f"Service {self.path} unexpectedly exited. Status code was: {return_code}")
selenium.common.exceptions.WebDriverException: Message: Service /opt/airflow/chromedriver unexpectedly exited. Status code was: 127

DAG导入一个单独的脚本,其中驱动程序的初始化如下:

def  init_chrome_browser(chrome_driver_path, url):

    options = Options()
    options.add_argument('--no-sandbox')
    options.add_argument('--headless')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--start-maximized')
    options.add_argument('window-size=2560,1440')

    browser = webdriver.Chrome(service=Service(chrome_driver_path), options=options)

    browser.get(url)

    return browser

由于某种原因,chromedriver总是“意外退出”。我已经尝试过在我的本地机器上安装chromedriver并将文件位置挂载到docker-compose映像,以及在airflow-worker的docker容器内安装chromedriver,但在这两种情况下我都得到了这个错误。
我也尝试过在worker中使用libglib2.0等软件包来补充chromedriver,如果我从worker的终端运行chromedriver,我确实可以启动它。但是当我尝试使用airflow运行它时,它仍然会给我同样的错误。

anauzrmj

anauzrmj1#

你确定你的chromedriver已经安装在所有运行的airflow docker容器上了吗?你能在airflow之外的worker和/或scheduler容器上运行你的webscraping python代码吗?

相关问题