Google Colaboratoryからスクレイピング
Google Colaboratoryからスクレイピングを行おうとすると、下記エラーが発生したので
WebDriverException: Message: Service chromedriver unexpectedly exited. Status code was: -6
その回避方法についてと、試しにサイトのスクショを撮ってツイートをするまでをした内容について備忘録として残しておく
エラー回避方法
以下に書いていた内容を使えば回避できました。
https://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10#issuecomment-1387618009
colabのUbuntuのバージョンが18から20に上がった影響とのことです。
丸コピした内容は以下
# エラー回避 参照
# https://github.com/kaliiiiiiiiii/Selenium-Profiles/issues/10#issuecomment-1387618009
%%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
これはUbuntuでChromiumブラウザとSeleniumをインストールするためのBashスクリプト。このスクリプトは以下のことを行っている
- Debian Busterのリポジトリを追加
- Debian Busterリポジトリ用の鍵をダウンロードしてインストール
- Chromiumパッケージに関連してDebian Busterリポジトリを優先するように設定
- ChromiumブラウザとChromiumドライバをインストール
- Seleniumをインストール
サイトのスクショ
SeleniumとPillowライブラリを使用して、Chromeブラウザを自動操作してウェブページのスクリーンショットを撮る
!pip install pillow
from selenium import webdriver
from PIL import Image
from IPython.display import Image as Img
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('start-maximized')
options.add_argument('disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--disable-browser-side-navigation')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
url = 'https://637g5-siaaa-aaaaj-aasja-cai.raw.ic0.app/token/mxzaz-hqaaa-aaaar-qaada-cai'
driver.get(url)
# Set the window size to a desired width and height
driver.set_window_size(1920, 1080)
driver.save_screenshot('screenshot.png')
driver.quit()
img = Image.open('screenshot.png')
img.save('screenshot_small.png', dpi=(72, 72), optimize=True)
Img(filename='screenshot_small.png')
- SeleniumとPillowライブラリをインストール
- Chromeブラウザの設定を設定(例えばヘッドレスモード、画面サイズ、など)
- 指定されたURLのページにアクセスしてスクリーンショットを撮影
- スクリーンショットを保存してDPIを変更
- ブラウザを終了
- スクリーンショットの画像を表示
画像を添付してツイート
ツイートは以下の流れも参考までに
https://hide.ac/articles/sIYvQ5lcf
!pip install tweepy
import tweepy
# Twitter認証情報は環境変数から取得
auth = tweepy.OAuthHandler(os.environ["TWITTER_CONSUMER_KEY"], os.environ["TWITTER_CONSUMER_SECRET"])
auth.set_access_token(os.environ["TWITTER_ACCESS_TOKEN"], os.environ["TWITTER_ACCESS_SECRET"])
# APIオブジェクトを作成
api = tweepy.API(auth)
# Update the status with the screenshot
with open("screenshot_small.png", "rb") as imagefile:
api.update_with_media("screenshot_small.png", status="test Screenshot #ckbtc Screenshot https://637g5-siaaa-aaaaj-aasja-cai.raw.ic0.app/token/mxzaz-hqaaa-aaaar-qaada-cai")
Twitterアカウントに画像とテキストを投稿するコード
このコードは、事前にセットアップされたTwitter APIキー(環境変数 TWITTER_CONSUMER_KEY、TWITTER_CONSUMER_SECRET、TWITTER_ACCESS_TOKEN、TWITTER_ACCESS_SECRET)を使用して、OAuth認証を行う。
認証後、APIオブジェクトを作成し、"screenshot_small.png"という名前の画像と
テキスト
"test Screenshot #ckbtc Screenshot https://637g5-siaaa-aaaaj-aasja-cai.raw.ic0.app/token/mxzaz-hqaaa-aaaar-qaada-cai"
をTwitterアカウントに投稿。
ツイート
以下のようになる
test Screenshot #ckbtc Screenshot https://t.co/hYhRY4XH25 pic.twitter.com/Tz3WDT6UtN
— shogaku.lens(💙,🧡)🌊📘🐰🦉🛸(🌸, 🌿).eth.bit.bnb (@ussu_ussu_ussu) February 4, 2023