Take Your Time

仕事や研究、コンピューターとの付き合い方

スクレイピングスクリプトのよくあるエラーについて

自分が遭遇するウェブクローリング・スクレイピングのエラーはたいてい、StaleElementReferenceExceptionWebDriverException: Message: unknown error: Element is not clickable at pointあたりだ。 スクロールしないと取得できない要素だったり、画面外の要素を取得できなかったりということが理由と考えられる。 基本の対処法は2つ。 1つめは、スクロール。 driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")をいれることで、要素の出現を促す。 画面外と指摘される場合は、その要素が出現する箇所までスクロールする。

button = driver.find_element_by_tag_name('button')
for i in range(50):
    driver.execute_script("window.scrollTo(0, {})".format(i*100))
        try:
            button.click()
            break
        except WebDriverException:
            pass

2つめは、リトライ。 時間をあけて何回か挑戦する。

# 初期設定
failed = True
try_cnt = 0
# クリックできるまで、10回までトライする。
while failed and try_cnt < 10:
          if try_cnt >= 10:
             break
          try_cnt += 1
          try:
                s.click()
                failed = False
          except WebDriverException:
                time.sleep(1)

番外編として、クリックする前にマウスオーバーする。 有効な場合もある。

s = driver.find_element_by_tag_name('span')
hover = ActionChains(driver).move_to_element(s)
hover.perform()