Python selenium でスクレイピングの際、要素が見つからないno such elementエラー時に for文のループをスキップする方法(例外処理try文とIF文のcontinueの組み合わせ)

Python selenium でスクレイピングの際、要素が見つからないno such elementエラー時に for文のループをスキップする方法
前提やりたい事
Python selenium3 で ページを推移してページの要素を順番にスクレイピングして値を取得したい。
今まではそのページIDを、リストにして for文で順番にページを表示して取得していた。
今回は棚卸しで商品コードがそのWEBページに存在するかどうかわからない条件で、ページを遷移させる必要が出てきた。しかも棚卸しなので、商品コードは大量なので、とてもfor文のリストを手打ちでは出来ない。
プログラム仕様
対策1 for文に使う商品コードのリストを、手打ちしていたのを辞めて、excelシートからセルの値を読み込みする に変更
対策2 存在しないページに遷移した場合に、エラーで止まらないように例外処理する
今まで、必ず存在するとわかっている商品IDをリストに手打ちして、for文で商品IDを順番に入れて検索で詳細ページに遷移していた。
しかし今回使う商品コードの参照元はAirレジ(POSレジ)に登録されていた商品コードのCSVファイルなので、色々なメーカーの商品コードが混在して存在している。
登録されているデータでは商品名や商品コードで統一性がなく、CSVファイルでコードをメーカーごとにソートが出来ない。
仕方なく手打ちでメーカー名を商品名の横に記載してソートして、for文に読み込ませようかと思ったけが、それも面倒くさい。
それなら、最初から エラーがでる前提でプログラムを書いて、エラーが出た時
つまりメーカーHPにて商品コードで検索しても、商品がヒットしない場合でも、エラーで止まらないようにする。
そして、for文の最初に戻って(ループに戻す)、次のコードで検索して新たなページを検索するようにしたい。と思った。
詰まった部分(最初に考えた処理)
try 文の例外処理 except とelse やpassの組み合わせで出来ると思っていたが、出来なかった。
try:要素をみつける処理文
pass (エラー発生しても中断しない)
except:
エラーが起きたとき(ページの要素が見当たらない場合)に処理する文
(for文の最初にスキップさせたいが no s uch elementでエラー文がでて止まる)
else:
エラーが起きなかった時に処理する文
問題点
Try文を使って 要素取得のエラー「No Such Element Exception」が出た時に次の処理文をスキップして、次のfor文の最初のループへ戻してやりたいと思った。
実際のエラー文
NoSuchElementException: Message: no such element: Unable to locate element:
しかし、try文の処理 でエラーが出た場合のexceptの処理で、for文のループの最初に戻してやる方法がわからなかった。
解決方法
from selenium.common.exceptions import NoSuchElementException
try: # 要素を探すコード
except NoSuchElementException as e:
if e !=None: #e(要素が見つからないエラーの値がある時はループ最初に戻る)
continue
else:
#ページ(要素)が存在する時の処理
エラー文で調べた所、NoSuchElementExceptionは selenium特有のエラーのため、エラー自体を認識する文を入れる必要があった。それがこの文
この文をいれると エラーのが出た時の値が NoSuchElementExceptionに入る
その値が存在した時だけ、if文のcontinueで 後の処理をせずにfor文のループの最初に戻してやると解決しました。
まとめ
しかし、かなりハマりました・・・
最初は try 文の except とelse の例外処理の組み合わせだけで出来ると思っていた。
エラーの内容もimportしないと行けないケースがあるんですね。 IF文もtry文と組み合わせる方法が出来たら、色々と応用できそうです