Как мы можем использовать 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