サーバーサイドSeleniumでスクショ時に豆腐化

発生している問題

データ収集の案件のためVPSを契約し、Seleniumスクレイピングをしています。
最初はどうせHeadlessだし、フォントをインストールせずにChromeだけインストールしてSeleniumしていました。URL等のテキストデータを抽出したり、ページの文章を抽出したテキストファイルをPCに落として閲覧するだけならこれで問題ありませんでした。

しかしながら、ある時ページの文章をテキストデータではなくスクショで保存しなければならない案件があり、日本語フォントが入っていないせいで豆腐化してしまう問題が発生しました。
ググったらtexlive-lang-cjkというライブラリ(この中に日本語フォントが入っている)を入れると直ると書いてあったので試してみましたが、1回目と同じように豆腐化。
ただ、texlive-lang-cjkを入れてからはコンソール画面が文字化けしなくなったため、Chrome以外はちゃんとフォントが更新されているようです。

なぜChromeだけダメなのか不思議ですが、おそらく日本語フォントをインストールする前にChromeをインストールしたせいで、フォント情報無しでChromeが初期化されてしまった可能性が考えられます。
このような場合、Chromeの設定ファイルを自分で書き換える必要があると思いますが、Linux初心者なのでどのファイルをいじればいいのか見当がつきません。
ご教授いただければ幸いです。
豆腐化

該当のソースコード

Python

from selenium.webdriver import なんちゃらの数行は省略 BASEURL = "https://b.hatena.ne.jp/"FILENAME = "screen_selenium.png" options = ChromeOptions()ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'for arg in ['--headless', '--no-sandbox', '--window-size=800,600', '--user-agent=' + ua]: options.add_argument(arg)service = ChromeService(executable_path=r'/usr/bin/chromedriver') with Chrome(service=service, options=options) as driver: driver.get(BASEURL) WebDriverWait(driver=driver, timeout=10).until(EC.presence_of_all_elements_located) driver.save_screenshot(FILENAME)

補足情報(FW/ツールのバージョンなど)

WebArena Indigo
2 CPU 2 GB
Ubuntu 20.04
Python 3.8.10
selenium 4.4.3
Google Chrome 104.0.5112.101
ChromeDriver 104.0.5112.101

コメントを投稿

0 コメント