Selenium
python3

Seleniumでchromeブラウザをスクロールする

概要

Seleniumのテストでブラウザをスクロールする場合に調べた内容をメモしておく。

要素指定

要素を指定して移動する。
※ 位置の微調整のために、offset引数を用意しています
※ スクロールについてくるナビゲーションなどがあった場合、位置の微調整が必要

メソッド定義

class Browser:
    def scrollByElemAndOffset(self, element, offset = 0):

        self.driver.execute_script("arguments[0].scrollIntoView();", element)

        if (offset != 0):
            script = "window.scrollTo(0, window.pageYOffset + " + str(offset) + ");"
            self.driver.execute_script(script)

使用例

browser = Browser()
element = browser.driver.find_element_by_id('some_id')
browser.scrollByElemAndOffset(element, -10)

高さ指定

高さを指定して移動する。

メソッド定義

class Browser:
    def scrollByY(self, height):
        self.driver.execute_script("window.scrollTo(0, " + str(height) + ");")

使用例

browser = Browser()
element = browser.driver.find_element_by_id('some_id')
browser.scrollByY(element.location_once_scrolled_into_view['y'])

まとめ

高さ指定の場合、広告など遅れて後から表示されるものがあった場合、位置がズレたりするみたい。
要素指定で微調整した方が、あまりズレなくて良さそう・・・

参考サイト