איך להפעיל Selenium עם דפדפן בלי GUI על Github Actions

04/10/2020
git

פוסט זה כולל טיפ קצר לעבודה יעילה יותר עם Git.
בשביל להבין את גיט לעומק אני ממליץ על קורס גיט שלנו כאן באתר.
בקורס תלמדו איך גיט עובד מתחת למכסה המנוע ואיך להשתמש בו בצורה יעילה מהבסיס ועד לנושאים המתקדמים.

אחד הדברים שאני אוהב ב Github Actions (בטח יש את זה גם ב Gitlab ובמקומות אחרים, פשוט אני עובד בינתיים עם גיטהאב) הוא העובדה שכבר בסביבת ברירת המחדל שלהם הם התקינו המון המון ספריות וקינפגו את הכל שיעבוד יפה יחד.

בסיפור היום רציתי להפעיל את Selenium אבל לא במצב Headless Chrome אלא במצב עבודה של כרום רגיל, ועל שרת מרוחק כלומר בלי GUI. עם גיטהאב אקשנס זה לקח פחות מעשר דקות עבודה. הנה מה שצריך:

1. הסקריפט

זה סקריפט לדוגמה שמריץ Chrome במצב גרפי רגיל באמצעות סלניום אבל בתוך סביבה גרפית שנקראת Xvfb. סביבה זו היא פשוט סביבה גרפית וירטואלית כך שמבחינת כרום הוא כותב למסך רגיל אבל מבחינת השרת אין שום פלט:

from pyvirtualdisplay import Display
from selenium import webdriver

with Display() as disp:
    driver = webdriver.Chrome()
    driver.get('https://www.tocode.co.il')
    print(driver.title)
    driver.close()

הסקריפט נכנס לאתר טוקוד ולוקח משם את שורת הכותרת וידפיס אותה למסך. אם תתקינו את הספריות ותריצו אצלכם על המכונה, ובהנחה ש Xvfb מקונפג כמו שצריך, מה שתראו זה רק את שורת הכותרת של הדף הראשי באתר בלי שום GUI מהדפדפן.

2. ה Workflow

בשביל להריץ את זה אוטומטית בתוך Github יצרתי תיקיה בשם .github, בתוכה תיקיה בשם workflows ובתוכה קובץ בשם selenium.yml. זה התוכן שלו:

name: selenium-demo

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.8]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v1
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run file
      run: |
        python print_tocode_header.py

השוס כאן הוא שאין שום התקנה של xvfb, כרום או כרומדרייבר. זה הכל מגיע אוטומטית מ Github Actions בזכות הבחירה ב ubuntu-latest בתור סביבת ההרצה.

3. ריפוזיטורי לדוגמה

רוצים לראות את הקוד בפעולה? כל מה שצריך לעשות זה fork לריפו שלי ואז להכניס שינוי כלשהו לקוד. באופן אוטומטי ה Workflow ירוץ בכל קומיט שלכם:

https://github.com/ynonp/github-selenium-xvfb-demo

אפשר לראות את תוצאות ההרצה בטאב Actions לדוגמה אלה ההרצות לדוגמה שאני ביצעתי בשביל לכתוב את סקריפט הדוגמה:

https://github.com/ynonp/github-selenium-xvfb-demo/actions