在 Colab 上使用 selenium 與 webdriver 不報錯!

Hugo Wang

試試 requests

起初,我原本以為 Colab 設計上有限制使用者在上面爬蟲,不過實測過後,使用 requests get 可以確實取得資料。

selenium 想必也可以?

在本機端爬蟲時我都是在 Windows 11 環境下運行 chromedriver;因此剛開始測試時,我直接將 chromedriver 上傳至雲端並使用

1
2
from google.colab import driver
drive.mount('/content/drive')

來架接 Google Drive 路徑存取 chrome-driver
卻忽略了一個重點:
Google Colab 是 Linux 架構!!!!!
Google Colab 是 Linux 架構!!!!!
Google Colab 是 Linux 架構!!!!!
(很重要講三次)

最新版 chromedriver 載點

接著,我讓程式讀取 Linux64 的 chromedriver 的雲端路徑,並參考了需多網路上的做法卻依然持續出現 wrong permissions 的報錯。

出 bug 的解方

解決的過程中,歷經了腦袋一片混亂,到處翻了各種語言的資料,被 ChatGPT 耍了一波……QAQ

這邊就直接讓大家少走這些冤枉路吧~
(以下解方為 Oct. 2nd, 2023 時適用的方法)

  • 為何 Google Colab 無法直接執行 selenium 與 webdriver(chromedriver)?
    • Colab 架構為 Linux 雲端虛擬機,由於目前使用 Ubuntu 20.04 LTS,已不再支援直接使用 chromium-browser
    • 解決辦法為:從 Debian buster repository 安裝套件
  • 若完成上述步驟後為何還是會有其他報錯
    • 完成上述步驟後基本上已經可以執行程式,若還有報錯,此時大多數的原因為 selenium 在 4.10.0 版後,陸續有不少語法上的更新,而 pip install selenium 預設安裝最新版本 4.13.0,許多網路上及書本中的 source code 無法相容
    • 解決辦法為:安裝時指定 4.3.0 版,pip install selenium==4.3.0

source code

  1. 從 Debian buster repository 安裝套件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    %%shell
    # Ubuntu no longer distributes chromium-browser outside of snap
    #
    # Proposed solution: https://askubuntu.com/questions/1204571/how-to-install-chromium-without-snap

    # Add debian buster
    cat > /etc/apt/sources.list.d/debian.list <<'EOF'
    deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster.gpg] http://deb.debian.org/debian buster main
    deb [arch=amd64 signed-by=/usr/share/keyrings/debian-buster-updates.gpg] http://deb.debian.org/debian buster-updates main
    deb [arch=amd64 signed-by=/usr/share/keyrings/debian-security-buster.gpg] http://deb.debian.org/debian-security buster/updates main
    EOF

    # Add keys
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys DCC9EFBF77E11517
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 648ACFD622F3D138
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A

    apt-key export 77E11517 | gpg --dearmour -o /usr/share/keyrings/debian-buster.gpg
    apt-key export 22F3D138 | gpg --dearmour -o /usr/share/keyrings/debian-buster-updates.gpg
    apt-key export E562B32A | gpg --dearmour -o /usr/share/keyrings/debian-security-buster.gpg

    # Prefer debian repo for chromium* packages only
    # Note the double-blank lines between entries
    cat > /etc/apt/preferences.d/chromium.pref << 'EOF'
    Package: *
    Pin: release a=eoan
    Pin-Priority: 500

    Package: *
    Pin: origin "deb.debian.org"
    Pin-Priority: 300


    Package: chromium*
    Pin: origin "deb.debian.org"
    Pin-Priority: 700
    EOF

    # Install chromium and chromium-driver
    apt-get update
    apt-get install chromium chromium-driver

    # Install selenium
    pip install selenium #若要指定版本,在這行後邊直接加上 ==版本號碼
  2. 執行 selenium 程式

    1
    2
    3
    4
    5
    6
    7
    from selenium import webdriver
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.headless = True
    drive = webdriver.Chrome('chromedriver',options=chrome_options)
    drive.get("https://www.google.com")

References

  • 在 Colab 上使用 selenium 與 webdriver 不報錯!
  • https://whyhugo.github.io/2023/10/02/using-selenium-in-colab/
  • 文章作者:Hugo Wang
  • 撰寫時間:2023-10-02
  • 《版權宣告》
  • CC BY-SA 4.0
    署名-相同方式共享
 留言
文章目錄
在 Colab 上使用 selenium 與 webdriver 不報錯!