Google SlideをPythonで操作してみる
Simple Wiki Based Contents Management System
関心分野 >> Google SlideをPythonで操作してみる

GoogleSlideをPythonで操作する

Google Slideには、GoogleSlideAPIが公開されており、Pythonからスライドの生成や編集をおこなうことができるそうです。
上記のリンクをみるとGoogle Slide APIでできることは以下の通り。
このようにGoogleSlideの作成や編集に関して、基本的な部分はPythonから操作することができそうです。しかし、GoogleSlideAPIでは、ファイルを開いてプレゼンを行う機能はないようです。これは、GoogleSlide自体がブラウザでオペレーションするためプレゼンの実行自体は、ブラウザを操作する必要があるためだと思います。

SeleniumとChromeを使ってGoogleSlideを操作する

GoogleSlideAPIでは、作成済みのスライドを使ってプレゼンを行うための操作はできないようでしたので、seleninumを使って操作してみます。

seleniumのモジュールをインストール

Pythonでseleniumを使用するには、selenuimモジュールをインストールする必要があります。seleniumモジュールは、pipコマンドでインストールすることができますので、下記のコマンドを実行すればOKです。
 # pip install selenium
次に seleniumドライバ(chromedriver)のインストールを行います。

chromedriverのインストール

seleniumでChromeを操作は、chromedriverを介して実行されます。chromedriverは、使用しているOSごとにバイナリがことなりますので、http://chromedriver.chromium.org/downloads から使用中のChromeのバージョンに対応したchromedriverをインストールします。
chromedriverは、pipコマンドを用いてインストールすることも可能ですが、使用しているChromeのバージョンとの不整合が生じる場合もありますので、注意してください。pipコマンドでのインストールするには、下のように行います。
 # pip install chromedriver-binary
pipコマンドでインストールする場合には、''import chromedriver_binary''を実行することでPathを通してくれるので便利ですが、Chromeのバージョンと異なる場合には、エラーになります。chromeのバージョンを確認するには、 chrome://version にアクセスすれば表示されます。

Pythonの簡単なプログラムの作成

seleniumのインストールが終了すれば、Chromeを起動してGoogleSlideにアクセスしてみましょう。ここで、気を付けるのは seleniumでChromeを開いた場合に、基本的に使用中のブラウザに保存されたアカウントは使えませんので、新規のユーザを作成しGoogleのアカウント情報をseleniumのプロファイルに記憶させるか、GoogleSlideを誰でもアクセス可能なURLを指定するかのどちらかの処理が必要になります。
では、簡単なサンプルプログラムを下に示しておきます。
#
#
#
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

sample_slide = "<スライドのID>"

class GSlide(object):
  def __init__(self, profile_path="", profile_name="", chromedriver="chromedriver.exe"):
    self.profile_path=profile_path
    self.profile_name=profile_name
    self.chromedriver=chromedriver
    self.driver = None
    
  def login(self):
    options=webdriver.chrome.options.Options()
    # If you want to use access profile, you should create a new profile by using command line interface.
    if self.profile_path and self.profile_name:
      options.add_argument('--user-data-dir='+self.profile_path)
      options.add_argument("--profile-directory="+self.profile_name)
    self.driver = webdriver.Chrome(executable_path=self.chromedriver,options=options)
    return self.driver

  def open_mydrive(self):
    self.driver.get('https://drive.google.com/drive/my-drive')
    return

  def open(self, file_id):
    self.driver.get("https://docs.google.com/presentation/d/" + file_id)
    return

  def start(self):
    body = self.driver.find_elements_by_tag_name('body')
    body[0].send_keys(Keys.CONTROL, Keys.SHIFT, Keys.F5)
    return

  def stop(self):
    ele = self.driver.find_elements_by_tag_name('iframe')
    ele[-1].send_keys(Keys.ESCAPE)
    return

  def next(self):
    ele = self.driver.find_elements_by_tag_name('iframe')
    ele[-1].send_keys(Keys.SPACE)
    return

  def prev(self):
    ele = self.driver.find_elements_by_tag_name('iframe')
    ele[-1].send_keys(Keys.BACKSPACE)
    return

if __name__ == '__main__':
    slide=GSlide()
    slide.login()
    slide.open(sample_slide)
    slide.start()