4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

ブラウザ操作を自動化するライブラリのSelenium。
Seleniumのfind_elementメソッド遅くて正直しんどくないですか?
特に大量のデータを扱うときなんかだと、イライラしてキーボードを投げたくなっちゃうこともしばしば…。
そんな時は、page_sourceをもってきてlxmlに食わせてしまいましょう。

動作環境

  • Python 3.12.3
  • google-colab-selenium-1.0.13

どのくらい違うの?

以下のコードで実行時間を比較してみました。
今回は、例として、Yahoo Japanからリアルタイム検索で話題のキーワードを取得します。

import google_colab_selenium as gs
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import datetime
import lxml.html
import lxml.cssselect

options = Options()
options.add_argument("--headless")
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--no-sandbox")
options.add_argument("--lang=ja")
driver = gs.Chrome(options=options)

start_time = datetime.datetime.now()
# Yahoo Japanからリアルタイム検索で話題のキーワードを取得
driver.get("https://www.yahoo.co.jp/")
# find_elementsで要素を探索
results = driver.find_elements(By.CLASS_NAME, "_35gOEPVmLqF0YTra3WRwfD")

end_time = datetime.datetime.now()
for val in results:
  print(val.text)

find_elements_return_time = end_time - start_time
print(f"\nfind_elements実行時間: {find_elements_return_time}\n")


start_time = datetime.datetime.now()
# Yahoo Japanからリアルタイム検索で話題のキーワードを取得
driver.get("https://www.yahoo.co.jp/")
# lxmlによる探索
html = lxml.html.fromstring(driver.page_source)
results = html.cssselect("._35gOEPVmLqF0YTra3WRwfD")
end_time = datetime.datetime.now()

for val in results:
  print(val.text)

lxml_return_time = end_time - start_time
print(f"\nlxml実行時間: {lxml_return_time}")

driver.quit()

実行してみるとこんな感じ

image.png

lxmlでの取得は約1秒で終わったのに対し、find_elementsでの取得では約2秒かかっていて、処理時間に大きな差がありました。

今回のように1つの要素のみを取得する場合はあまり差が出ませんでしたが、ページの内容が増えれば増えるほど、この差はさらに大きくなります。

まとめ

Seleniumでfind_elementsが遅いと感じているなら、ぜひlxmlを試してみてください。
きっとしあわせになれるでしょう。

それではそれでは。

4
4
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
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?