Pythonでwebbotを使用しWeb自動化を行う

Pythonでwebbotを使用しWeb自動化を行ってみます。

今回は、webbotライブラリを使用します。webbotはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.7.9」を使用しています。(Windows10)(pythonランチャーでの確認)

■webbotを使用しWeb自動化を行う

では、早速webbotを使用しWeb自動化を行うスクリプトを書いていきます。

■コード

from webbot import Browser

web = Browser()

web.go_to('yahoo.co.jp')
web.type('大阪市')
web.press(web.Key.ENTER)

まずは「from import」を用いwebbotモジュールのBrowserを呼び出します。

その後、go_to()を用いて、括弧内でWebブラウザで開くWebページを指定します。今回は「Yahoo!Japan」を指定しています。

指定後、type()を用いて、括弧内で今回は指定したWebページの検索窓に入力するキーワードを指定します。

指定後、press()を用いて、括弧内でWebページ上でEnterキーを自動で押すように指定します。

■実行・検証

このスクリプトを「web_test_auto.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "web_test_auto.py", line 3, in 
    web = Browser()
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\webbot\webbot.py", line 68, in __init__
    self.driver = webdriver.Chrome(executable_path=driverpath, options=options)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
    service_log_path, service, keep_alive)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\chromium\webdriver.py", line 99, in __init__
    options=options)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 268, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 359, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in execute
    self.error_handler.check_response(response)
  File "C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
  (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.19043 x86_64)

実行すると「selenium.common.exceptions.WebDriverException: Message: unknown error:」というエラーが発生します。「cannot find」ということで、Chrome binaryが探しても見つからないことが原因でエラーが発生していると判断し、chromedriverをダウンロードします。

ダウンロードする際は、GoogleChromeのバージョンを確認しておきます。確認後、「ChromeDriver – WebDriver for Chrome – Downloads(https://chromedriver.chromium.org/downloads)」にアクセスします。

アクセス後、今回のGoogleChromeのバージョンが「96.0.4664.110」なので、Webページ上でバージョンが近い「ChromeDriver 96.0.4664.45」をクリックし、「chromedriver_win32.zip」をダウンロードします。

ダウンロードが完了すると、Webブラウザで指定されている保存場所に「chromedriver_win32.zip」が保存されます。このファイルを展開・解凍します。

展開・解凍後、フォルダ内の「chromedriver.exe」を、今回はわかりやすく「C:\Users\user_\test(フォルダパス)」に移動させておきます。

移動後、「C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\webbot」のフォルダ内の「webbot.py」ファイルを編集します。

■コード(修正前)

self.driver = webdriver.Chrome(executable_path=driverpath, options=options)

■コード(修正後)

self.driver = webdriver.Chrome(executable_path=r'C:\Users\user_\test\chromedriver.exe', options=options)

編集は、ファイル内の上記の箇所を編集し、ファイルを保存します。

py -3.7 -m pip uninstall selenium
py -3.7 -m pip install selenium==3.141.0

保存後、コマンドプロンプト上で上記のコマンドをそれぞれ入力し、Enterキーを押します。今回のPythonにインストールされたseleniumを一度アンインストールし、「selenium==3.141.0」をインストールします。なぜなら、同じようにブラウザが起動しないというエラーが報告されており、報告内容にseleniumのアンインストールなどが記載されていたため、念の為に行っておきます(https://github.com/nateshmbhat/webbot/issues/62)。

なお、今回は、Python Version 3.7.9にインストールを行うために、Pythonランチャー切り替えのために、上記のコマンドを使用しています。

■再度実行・検証

その後、編集した「web_test_auto.py」を、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、今度はGoogleChromeが自動的に起動し、指定したWebページにアクセスし、検索窓に自動で指定したキーワードを入力し、そしてEnterキーが押され、検索結果を表示させることができました。GoogleChrome上には「Chromeは自動テストソフトウェアによって制御されています。」と出力されていることも確認できました。

DevTools listening on ws://127.0.0.1:18866/devtools/browser/97f3ff2d-f5d6-4e39-90bf-17fad0b2640a

C:\Users\user_>[9316:6608:1218/112245.281:ERROR:chrome_browser_main_extra_parts_metrics.cc(226)] crbug.com/1216328: Checking Bluetooth availability started. Please report if there is no report that this ends.
[9316:6608:1218/112245.284:ERROR:chrome_browser_main_extra_parts_metrics.cc(229)] crbug.com/1216328: Checking Bluetooth availability ended.
[9316:2568:1218/112245.290:ERROR:device_event_log_impl.cc(214)] [11:22:45.290] USB: usb_device_handle_win.cc:1048 Failed to read descriptor from node connection: システムに接続されたデバイスが機能していません。 (0x1F)
[9316:6608:1218/112245.298:ERROR:chrome_browser_main_extra_parts_metrics.cc(232)] crbug.com/1216328: Checking default browser status started. Please report if there is no report that this ends.
[9316:2568:1218/112245.317:ERROR:device_event_log_impl.cc(214)] [11:22:45.316] Bluetooth: bluetooth_adapter_winrt.cc:1075 Getting Default Adapter failed.
[9316:6608:1218/112245.342:ERROR:chrome_browser_main_extra_parts_metrics.cc(236)] crbug.com/1216328: Checking default browser status ended.
[10072:7964:1218/112437.800:ERROR:gpu_init.cc(457)] Passthrough is not supported, GL is disabled, ANGLE is

コマンドプロンプト上では上記のメッセージが出力されました。このメッセージを出力しないようにするためには、「C:\Users\user_\AppData\Roaming\Python\Python37\site-packages\webbot」のフォルダ内の「webbot.py」ファイルを編集します。

■コード(修正前)

    def __init__(self, showWindow=True, proxy=None , downloadPath:str=None):
        options = webdriver.ChromeOptions()
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--no-sandbox")

■コード(修正後)

    def __init__(self, showWindow=True, proxy=None , downloadPath:str=None):
        options = webdriver.ChromeOptions()
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--no-sandbox")
        options.add_experimental_option('excludeSwitches', ['enable-logging'])

編集は、上記の箇所を編集し、保存します。

保存後、スクリプトを実行すると、コマンドプロンプト上に、先程のメッセージが出力されず、処理が実行されることを確認できました。

コメント

タイトルとURLをコピーしました