Как мы можем использовать Selenium Webdriver в colab.research.google.com?

Я хочу использовать Selenium Webdriver Chrome в colab.research.google.com для быстрой обработки. Я смог установить Selenium используя !pip install selenium но веб-драйверу chrome нужен путь к webdriverChrome.exe. Как я должен использовать это?

PS- colab.research.google.com - это онлайн-платформа, которая предоставляет GPU для быстрых вычислений, связанных с глубоким обучением. Пожалуйста, воздержитесь от таких решений, как webdriver.Chrome(путь).

11 ответов

Это можно сделать, установив хром-веб-драйвер и настроив некоторые параметры, чтобы он не зависал в google colab:

!pip install selenium
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
wd.get("https://www.webite-url.com")

Этот работал в колабе

!pip install selenium
!apt-get update 
!apt install chromium-chromedriver

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
driver =webdriver.Chrome('chromedriver',chrome_options=chrome_options)

Чтобы упростить задачу, я сделал свою собственную библиотеку.

!pip install kora -q
from kora.selenium import wd
wd.get("https://www.webite-url.com")

Не хватает репу, чтобы комментировать. :(

Однако ответ @Thomas все еще работает в 06.10.2021, но с одним простым изменением, так как справа вы получите DeprecationWarning: use options instead of chrome_options

Рабочий код ниже:

      !pip install selenium
!apt-get update # to update ubuntu to correctly run apt install
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
wd = webdriver.Chrome('chromedriver',options=options)
wd.get("https://stackoverflow.com/questions/51046454/how-can-we-use-selenium-webdriver-in-colab-research-google-com")
wd.title

Google Collab сейчас использует Ubuntu 20.04, и вы не можете установить браузер Chrome без оснастки. Но вы можете установить его, используя файлы .deb для Ubuntu 18.04 по адресу security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/.

Для этой цели я создал скрипт на Python. Он находит последнюю версию браузера chromium и chromedriver для 18.04 и устанавливает их для вашего Google Colab с Ubuntu 20.04.

Ссылки на сайте регулярно обновляются. Вам не нужны репозиторий Debian и ключи APT.

      import os
import re
import subprocess
import requests

# The deb files we need to install
deb_files_startstwith = [
    "chromium-codecs-ffmpeg-extra_",
    "chromium-codecs-ffmpeg_",
    "chromium-browser_",
    "chromium-chromedriver_"
]

def get_latest_version() -> str:
    # A request to security.ubuntu.com for getting latest version of chromium-browser
    # e.g. "112.0.5615.49-0ubuntu0.18.04.1_amd64.deb"
    url = "http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/"
    r = requests.get(url)
    if r.status_code != 200:
        raise Exception("status_code code not 200!")
    text = r.text

    # Find latest version
    pattern = '<a\shref="chromium\-browser_([^"]+.ubuntu0\.18\.04\.1_amd64\.deb)'
    latest_version_search = re.search(pattern, text)
    if latest_version_search:
        latest_version = latest_version_search.group(1)
    else:
        raise Exception("Can not find latest version!")
    return latest_version

def download(latest_version: str, quiet: bool):
    deb_files = []
    for deb_file in deb_files_startstwith:
        deb_files.append(deb_file + latest_version)

    for deb_file in deb_files:
        url = f"http://security.ubuntu.com/ubuntu/pool/universe/c/chromium-browser/{deb_file}"

        # Download deb file
        if quiet:
            command = f"wget -q -O /content/{deb_file} {url}"
        else:
            command = f"wget -O /content/{deb_file} {url}"
        print(f"Downloading: {deb_file}")
        # os.system(command)
        !$command

        # Install deb file
        if quiet:
            command = f"apt-get install /content/{deb_file} >> apt.log"
        else:
            command = f"apt-get install /content/{deb_file}"
        print(f"Installing: {deb_file}\n")
        # os.system(command)
        !$command

        # Delete deb file from disk
        os.remove(f"/content/{deb_file}")

def check_chromium_installation():
    try:
        subprocess.call(["chromium-browser"])
        print("Chromium installation successfull.")
    except FileNotFoundError:
        print("Chromium Installation Failed!")

def install_selenium_package(quiet: bool):
    if quiet:
        !pip install selenium -qq >> pip.log
    else:
        !pip install selenium

def main(quiet: bool):
    # Get the latest version of chromium-browser for ubuntu 18.04
    latest_version = get_latest_version()
    # Download and install chromium-browser for ubuntu 20.04
    download(latest_version, quiet)
    # Check if installation succesfull
    check_chromium_installation()
    # Finally install selenium package
    install_selenium_package(quiet)

if __name__ == '__main__':
    quiet = True # verboseness of wget and apt
    main(quiet)

И попробуй селен

      from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
wd = webdriver.Chrome('chromedriver', options=chrome_options)
wd.get("https://www.google.com")
print(f"Page title: {wd.title}")

чтобы использовать селен в GOOGLE COLAB, выполните следующие шаги в блокноте colab.

      !pip install kora -q

КАК ИСПОЛЬЗОВАТЬ ЭТО ВНУТРИ COLAB:

      from kora.selenium import wd
wd.get("enter any website here")

ВЫ ТАКЖЕ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТО С Beautiful Soup

      import bs4 as soup
wd.get("enter any website here")
html = soup.BeautifulSoup(wd.page_source)

colab и selenium Как можно извлечь данные из whoscored.com?

      #    https://www.whoscored.com

# install chromium, its driver, and selenium
!apt update
!apt install chromium-chromedriver
!pip install selenium
# set options to be headless, ..
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
# open it, go to a website, and get results
wd = webdriver.Chrome(options=options)
wd.get("https://www.whoscored.com")
print(wd.page_source)  # results

Установить библиотеку

      !pip install selenium
!apt-get update
!apt install chromium-chromedriver

И настройте драйвер хрома

      from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# Set the path to the chromedriver executable
chromedriver_path = '/usr/bin/chromedriver'

# Set the Chrome driver options
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

# Start the Chrome driver
driver = webdriver.Chrome(service=Service(executable_path=chromedriver_path), options=options)

# Navigate to a website
driver.get('https://www.example.com')

# Quit the driver
driver.quit()

если вы получаете какую-либо ошибку, например «WebDriverException: Сообщение: Служба chromedriver неожиданно завершила работу. Код состояния: 1»

на странице записной книжки Ctrl + Shift + P выберите «Использовать резервную версию времени выполнения» после повторной попытки.

Обновленный ответ

      # Set up for running selenium in Google Colab
## You don't need to run this code if you do it in Jupyter notebook, or other local Python setting
%%shell
sudo apt -y update
sudo apt install -y wget curl unzip
wget http://archive.ubuntu.com/ubuntu/pool/main/libu/libu2f-host/libu2f-udev_1.1.4-1_all.deb
dpkg -i libu2f-udev_1.1.4-1_all.deb
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
dpkg -i google-chrome-stable_current_amd64.deb
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P /tmp/
unzip -o /tmp/chromedriver_linux64.zip -d /tmp/
chmod +x /tmp/chromedriver
mv /tmp/chromedriver /usr/local/bin/chromedriver
pip install selenium
      !pip install chromedriver-autoinstaller

import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')

import time
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
import chromedriver_autoinstaller

# setup chrome options
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless') # ensure GUI is off
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# set path to chromedriver as per your configuration
chromedriver_autoinstaller.install()

# set the target URL
url = "put-url-here-to-scrape"

# set up the webdriver
driver = webdriver.Chrome(options=chrome_options)
      from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# quit the driver
driver.quit()

Это скопировано из решения пользователя Github с именем goljavi из этой темы.https://github.com/googlecolab/colabtools/issues/3347

Вы можете избавиться от использования файла.exe с помощью WebDriverManager, поэтому вместо этого

System.setProperty("webdriver.gecko.driver", "driverpath/.exe");
WebDriver driver = new FirefoxDriver();

ты будешь писать это

WebDriverManager.firefoxdriver().setup();
WebDriver driver = new FirefoxDriver();

Все, что вам нужно, это добавить зависимость в файл POM (я предполагаю, что вы используете maven или какой-то инструмент для сборки). Пожалуйста, посмотрите мой полный ответ о том, как использовать это в этой ссылке Использование WebdriverManager

Другие вопросы по тегам