LoginSignup
2
0

More than 3 years have passed since last update.

PythonのSeleniumを使ったGoogleFormのプルダウンの操作方法

Posted at

概要

GoogleFormのプルダウンを選択する際に、通常の操作できなかったのできませんでした。こちらを参考に対応しようとしてもうまくいかずstackOverFlowの日本語版で質問をしたところでコメントをいただき解決できたのでその手順をまとめました。
pythonで使用した場合のケースとなります。おそらくほかの言語でも同じように対応できるかと思います。
ソースはこちらで公開しています。
以前の投稿などで使っているベースクラスに実装しています。

通常のプルダウンの操作方法

ベースクラスでは以下のメソッドで通常のプルダウンを操作しています。
webElement で対象のX-Pathを設定、 inputValue でプルダウンの選択値を表示名で設定しています。
画面描画の待機処理、例外処理なども含まれていますがそこを除くと

  1. プルダウンのX-Pathをもとにプルダウンの要素を取得
  2. Select に取得した要素を渡す。
  3. 表示しているテキストでプルダウンを選択する。

という流れになっています。

    # プルダウンを選択する 要素が表示されるまで20秒待つ さらに待ち時間が必要な場合は指定を行う
    def selectPullDownWaitDisplay(self,webElement,inputValue,waitTime=0):
        try:
            time.sleep(waitTime)
            self.wait.until(expected_conditions.element_to_be_clickable((By.XPATH,webElement)))
            selectList=self.driver.find_element_by_xpath(webElement)
            selectForm=Select(selectList)
            # 画面に表示されるプルダウンのテキストで選択を行う
            selectForm.select_by_visible_text(inputValue)
        except SystemError as err:
            self.log.error('テキスト送信失敗:'+webElement)
            self.log.error('例外発生 {}'.format(err))
            self.getScreenShot()
            raise
        except:
            self.outputException(webElement)
            raise

F12を押下することで起動する開発者ツールで確認すると
通常プルダウン.PNG
このようにselectタグになっていることが確認できます。

GoogleFormのプルダウンの操作方法

通常のプルダウンは select要素を選択していますがGoogleFormのプルダウンは select要素ではないので通常の方法で選択すると select 要素ではないとエラーが発生してしまいます。
今回は以下のメソッドでプルダウンを操作しています。
buttonInfo で対象のプルダウンの右にある のX-Pathを設定、 target でプルダウンの選択値を表示名で設定、pullDownPosition はGoogleForm内のプルダウンの位置を0始まりで設定しています。
画面描画の待機処理、例外処理なども含まれていますがそこを除くと

  1. のX-Pathを使ってクリック
  2. プルダウンの内容が表示されるのを待機後してexportSelectPopup でプルダウンの内容を取得します。
    • この時 find_elements_by_class_name で取得しているので、選択しの内容を画面のプルダウンの数だけ取得できます。中身はクリックをした位置のものだけ入っている状態です。
  3. クリックをした位置をpullDownPosition で判断して中身があるところから content のtagを取得します。
  4. 取得したtagの内容と選択したい内容が一致したものを選択します。一致しないときは何もしないで次の処理に進みます。

という流れになっています。

    # GoogleFormの場合プルダウンが通常の方法では選択できないので
    def selectPullDownGoogleForm(self,buttonInfo,target,pullDownPosition):
        try:
            self.webElementClickOverlay(buttonInfo)
            time.sleep(3)
            options=self.driver.find_elements_by_class_name("exportSelectPopup")
            contents = options[pullDownPosition].find_elements_by_tag_name('content')
            [i.click() for i in contents if i.text == target]
        except SystemError as err:
            self.log.error('要素待機失敗:'+buttonInfo)
            self.log.error('例外発生 {0}'.format(err))
            self.getScreenShot()
            raise
        except:
            self.outputException(buttonInfo)
            raise

開発者ツールで確認すると
googleform.PNG
このようにdivタグで囲まれていることが確認できます。

使用用途など

定期報告をGoogleFormで行っている場合など毎回選択して・・・というような面倒なところもこれを使っていけば楽になるかと

2
0
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
2
0