Xvfb を使用して仮想ディスプレイ環境を設定し、Seleniumスクリプトを実行するcronジョブの設定例

envフォルダがない場合でも、cronジョブ内で環境変数を直接設定することができます。以下は、Xvfb を使用して仮想ディスプレイ環境を設定し、Seleniumスクリプトを実行するcronジョブの設定例です。

スクリプトの修正

まず、Seleniumスクリプトを仮想ディスプレイXvfbを使用するように修正します。以下は、Seleniumスクリプトのサンプルです。

python
import os
import subprocess
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time

def start_xvfb():
    os.environ['DISPLAY'] = ':99'
    subprocess.Popen(['Xvfb', ':99', '-screen', '0', '1920x1080x24'])

def create_driver():
    options = Options()
    options.add_argument('--headless')
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--disable-gpu')
    options.add_argument('--window-size=1920x1080')
    options.add_argument('--disable-extensions')
    options.add_argument('--remote-debugging-port=9222')

    chrome_driver_path = '/usr/local/bin/chromedriver'  # ChromeDriverのパスを指定
    service = Service(chrome_driver_path)

    return webdriver.Chrome(service=service, options=options)

def main():
    start_xvfb()
    max_retries = 3
    for attempt in range(max_retries):
        try:
            driver = create_driver()
            driver.get('http://example.com')
            print(driver.title)
            driver.quit()
            break
        except Exception as e:
            print(f"Attempt {attempt + 1} failed: {e}")
            if driver:
                driver.quit()
            time.sleep(5)
    else:
        print("All attempts failed.")

if __name__ == "__main__":
    main()

Cronジョブの設定

次に、cronジョブを設定して、スクリプトを特定の時間に実行します。以下のようにcronジョブを設定します。

bash
46 10 * * * cd /home/NBSystem && /usr/bin/xvfb-run -a /usr/bin/python3 manage.py crawler_komine >> /home/NBSystem/komine_cron.log 2>&1

xvfb-runコマンドを使用することで、仮想ディスプレイ環境を簡単に設定できます。このコマンドは、Xvfbサーバを自動的に起動し、指定されたコマンドをその仮想ディスプレイ環境内で実行します。

まとめ

この設定により、cronジョブで仮想ディスプレイ環境を使用してSeleniumスクリプトを実行できるようになります。以下が要点です:

  1. Xvfb をインストールし、仮想ディスプレイを設定する。
  2. Seleniumスクリプトを仮想ディスプレイを使用するように修正する。
  3. cronジョブを設定して、xvfb-runコマンドを使用してスクリプトを実行する。

これにより、ヘッドレス環境でも安定してブラウザを動作させることができ、クラッシュのリスクを軽減できます。

未分類

Posted by ぼっち