質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

SeleniumでChromiumを操作したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 236

branch

score 61

ご覧いただきありがとうございます.

実現したいことと諸事情

表題の通り,Seleniumを使ってChromiumを操作したいのですが,Win10上でChromium+Seleniumを使用している人が少ないようで,Web上で検索をかけても見つかりません.
(ラズパイとかは出てきますが,,,そもそもapt-getが使えない+デフォルトブラウザがChromiumでChromeと競合しない&もともとPATHが通っている という点で参考にしかなりません.)

1.Selemiumでchromiumを明示的に指定して操作する方法
2.(Chromeのドライバと同一のもので動作すると踏んでいますが)動作しない場合は動作させる方法

をご教授いただけませんでしょうか.
1については公式リファレンスを確認しましたが,イマイチ理解できませんでした.(英語力の問題?)

というのも,翻訳自動化ツールを作成しているのですが,常駐ツールとして部内の事務用PCに導入させようとしているので,すでにユーザが多いであろうChromeよりはChromiumの方が都合がよいのです.
ChromeとChromedriverのメジャーバージョンが一致している必要があるが,Chromeでは自動アップデートがかかってしまうという点も今回Chromiumでの実装をもくろんでいる理由の一つです.

できていること

すでにChromeでは動作を確認しております.
以下のコードを実行するとChromeが起動し,最小化し,入力してある日本語を一文ごとに翻訳し,翻訳結果をprintしてくれます.ヘッドレスモードに関しては社内proxyの問題か,クラッシュするので最小化で対応しています.

ご検証いただける場合は事前にpip install chromedriver_binary==84.0.4147.30.0を実行してください.
詳しくはこちらが参考になるでしょう.

import time
import urllib.parse
import chromedriver_binary
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from time import sleep

class Translator:
    def __init__(self):
        self.options = Options()
        self.browser = webdriver.Chrome(options=self.options)
        self.browser.minimize_window()
        self.browser.implicitly_wait(2)

    def jp2entrans(self, text):
        text_for_url = urllib.parse.quote_plus(text, safe='')     #URLから翻訳
        url = "https://translate.google.co.jp/#ja/en/{0}".format(text_for_url)
        self.browser.get(url)

        wait_time = len(text) / 50     #翻訳待ちのタイムアウト
        time.sleep(wait_time)

        soup = BeautifulSoup(self.browser.page_source, "html.parser")    #翻訳結果の抽出
        ret =  soup.find(class_="tlid-translation translation")

        return ret.text

    def quit(self):
        self.browser.quit()


translator = Translator()

orig = "最近暑いですね.マスクをつけていると死んでしまいそうです."
origs = orig.split(".")

for i,txt in enumerate(origs):
    txt += "." 
    en_txt = translator.jp2entrans(txt)

    if i < len(origs)-1:        #最後の一文は".."になるのでスキップ
        print(en_txt)

translator.quit()


実行結果はIt's been hot recently.It seems that you will die if you wear a mask.となります.

環境とか

*Windows10
*Python3.8.4
*Google Chrome 84.0.4147.89   →C:\Program Files (x86)\Google\Chrome\Application
*Chromium  84.0.4147.0 → デスクトップ\chrome-win\chrome.exe  
(解決後追記)保守性向上のため移動しました.C:\Program Files\chrome-win\chrome.exe
前述の通り,メジャーバージョンを一致させています.置き場所に関しては現段階で特に指定はありません.

どうぞよろしくお願いいたします.

解決後のコード

def __init__(self):
        self.options = Options()
        self.options.binary_location =  "C:\\Program Files (x86)\\chrome-win\\chrome.exe"      #これを追加いました.
        self.browser = webdriver.Chrome(options=self.options)
        self.browser.minimize_window()
        self.browser.implicitly_wait(2)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • otn

    2020/07/21 19:53

    バージョン管理上の問題であれば、Firefoxを使うとか。

    キャンセル

  • branch

    2020/07/21 19:56

    ご意見ありがとうございます.
    最終的にはFireFoxやOpera(ドライバあるのか??)あたりで実装しようとは思いますが,使い慣れたChromeであれば私の開発もはかどりますので,,,
    一週間ほど回答を募集してみてからかな,と思っています.

    キャンセル

  • Helloc

    2020/07/22 05:38

    binary_location で Chromium の PATHを 指定してみて下さい

    因みに
    Opera では Launcher.exeではなく opera.exeです

    キャンセル

回答 1

checkベストアンサー

+1

これで どうでしょうか?

def __init__(self):
        self.options = Options()
        self.options.binary_location =  'Chromium のPATH'
        self.browser = webdriver.Chrome(executable_path ='chromedriver.exe のPATH' , options=self.options)
        self.browser.minimize_window()
        self.browser.implicitly_wait(2)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/22 10:01

    ご回答ありがとうございます.少し朝からバタついてしまって,確認が遅くなりました.
    ご教授いただいた方法で実現できました!ありがとうございます.
    chromium.exeは.options.binary_locationで指定すればよいのですね!
    当方の環境ではwebdriverのexecutable_pathに関しては不要でした.import chromedriver_binaryでモジュールを指定しているからかと思います.
    情報共有のために質問文末尾に動作したコードを追記させていただきます.
    また,追記修正依頼の項にも投稿していただき,ありがとうございます.
    また機会がございましたら,よろしくお願いいたします.

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る