0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Python】妻に真夜中のダンスレッスン予約を強要されたので、Webスクレイピングで回避を試みようとしている話 (8.ブラウザを開いて閉じる。)

Posted at

前回は、「7.importについて確認せよ」について投稿しました。
今回は、実際に seleniumで Google Chromeブラウザを開いて、あるサイトを表示し、閉じるまでをコーディングしたいと思います。


必要なパッケージを importする。

reserveLesson.py
 1  :  #各コンポーネントをインポート
 2  :  from selenium import webdriver
 3  :  from selenium.webdriver.chrome import service
 4  :  from webdriver_manager.chrome import ChromeDriverManager

詳細処理説明

2: seleniumライブラリの webdriverパッケージをインポートしています。
3: seleniumライブラリの serviceモジュールをインポートしています。

  • Chromeブラウザ起動時に直接 executable_pathを引数として渡していましたが、これは現在非推奨となっていて Serviceオブジェクト介して渡す必要があるので、この serviceモジュールをインポートしています。

4: webdriver_managerの chromeモジュールをインポートしています。

  • chromeドライバーの自動更新を実現するため、ドライバー管理ソフトウェアであるwebdriver_managerライブラリをインポートしています。

定数を定義します。

Pythonでは、定数はサポートされていませんが、慣例的に大文字とアンダーバーで定数であることを表すようです。

reserveLesson.py
 6  :  #--定数----------------
 7  :  LOGIN_URL = "https://google.com"    #ログイン画面のURL

7: ログインURLを定数として定義しています。

main処理

mainサブで主要な処理をコーディングしています。

    9:  #---------------------
   10:  # main処理
   11:  #---------------------
   12:  def main():
   13:      #Serviceオブジェクトを介して、execute_pathを指定する。
   14:      chrome_service =  service.Service(executable_path=ChromeDriverManager().install())
   15:      #chromeドライバー セッション開始(最新Ver自動インストール、およびオプション指定)
   16:      driver = webdriver.Chrome(service=chrome_service, options=getOptions())
   17:      #サイトを表示する。
   18:      driver.get(LOGIN_URL)
   19:      #chromeドライバー セッション終了
   20:      driver.quit()

処理詳細説明

14: Chromeドライバーの在り処である executable_pathを Serviceクラスに渡して serviceオブジェクトを生成します。

16: Chromeブラウザを開きます。

  • 引数 serviceには、15行目で生成した serviceオブジェクトを渡しています。
  • 引数 optionsには、後述する getOptionsファンクションで設定した Option値を渡しています。

ブラウザが表示されました。 (headless=Falseにしているので表示されます。)

18: サイトを表示します。

  • 引数の表示するサイトの URLを指定します。ここでは、7行目で指定した定数 LOGIN_URLを指定しています。

指定したサイトが表示されました。

20: Chromeブラウザを閉じます。

Chromeドライバの Optionを設定するファンクション

ブラウザを開く際に引数に渡している Options値を指定して返すファンクションです。今後、複数のOption値設定を考慮してファンクションにしました。

   24:  #---------------------
   25:  # SubRoutine
   26:  #---------------------
   27:  #--Get ChromeDriver Options------
   28:  def getOptions():
   29:      options = webdriver.ChromeOptions()
   30:      options.headless = False    #ヘッドレスモード True:ブラウザ画面非表示、False:表示
   31:  
   32:      return options

headlessプロパティで、ブラウザを開いた際に表示するか、それとも非表示にするかを指定できます。本番では、非表示にしますが、開発時はデバッグしやすいようFalse(非表示)を設定して表示するようにしています。

reserveLesson.pyの全容

reserveLesson.py
#各コンポーネントをインポート
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager.chrome import ChromeDriverManager

#--定数----------------
LOGIN_URL = "https://google.com"    #ログイン画面のURL
#---------------------
# main処理
#---------------------
def main():
    #Serviceオブジェクトを介して、execute_pathを指定する。
    chrome_service =  service.Service(executable_path=ChromeDriverManager().install())
    #chromeドライバー セッション開始(最新Ver自動インストール、およびオプション指定)
    driver = webdriver.Chrome(service=chrome_service, options=getOptions())
    webdriver.chrome.webdriver.service
    #サイトを表示する。
    driver.get(LOGIN_URL)
    #chromeドライバー セッション終了
    driver.quit()

#---------------------
# SubRoutine
#---------------------
#--Get ChromeDriver Options------
def getOptions():
    options = webdriver.ChromeOptions()
    options.headless = False    #ヘッドレスモード True:ブラウザ画面非表示、False:表示

    return options

#-------------------------------
# スクリプト実行時に mainサブコール
#-------------------------------
if __name__ == '__main__':
    main()

今回は、ブラウザを開き、サイトを表示して閉じる。ところまでできました。
次回は、ブラウザの検証機能を使用して要素を確認しつつ、ログインするところまでできればなと思います。では、良い1日を!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?