はじめに
xpathの基本と上手に指定するコツのまとめに関しての備忘録です。
初心者です😅
間違えてる部分が多々あると思います。
もし見つけた場合、ツッコミいただけると助かります🙇
🦁結論🦁
find_elements_by_xpath(xpath)
基本構文を使って条件を適切に行うことで修正を減らすことができる。
押さえておくべき点
- xpathはHTML文書、XMLなどに要素、属性などにアクセスするための言語
- pathを指定する際に「/」が1つ→ルートをしての絶対パスになり、「/」が2つだと文書内の任意のpathになる。
- 「.」が一つだと現在の要素、「.」が2つだと親要素を示す。
- @を利用して属性を選択(@idなど)
- 「*」によりすべてのものを選択できる(@*これは全ての属性)
- 条件選択する場合は[]を使う。
基本構文
基本は条件式で行う。
sample.py
elements = driver.find_elements_by_xpath("//div[@class='myClass']")
条件選択を2つにする
sample.py
elements = driver.find_elements_by_xpath("//div[@class='myClass' and @id='myId']")
条件を子孫要素で絞り込み
sample.py
elements = driver.find_elements_by_xpath("//div[@class='myClass']//p[@id='myId']")
どちらかの条件に当てはまる場合
sample.py
elements = driver.find_elements_by_xpath("//div[@class='myClass' or @id='myId']")
どちらかの条件かつ複数条件ある場合
sample.py
elements = driver.find_elements_by_xpath("//div[@class='myClass' or @id='myId']")
※子要素の条件を追加してさらに絞り込めるようにすることも可能。
※「or」もいくつも追加することも可能。
注意点
- 「element」と「elements」の違い。
「element」と「elements」の違い
「element」 find_element_by_xpath(xpath)
- 単一の要素を返す(複数あったとしても一番最初の要素のみ)
- 要素が見つからない場合にNoSuchElementExceptionエラーを投げる(selenium)
「elements」 find_elements_by_xpath(xpath)
- 要素のリストを返す
- 要素が見つからない場合には空のリストを返す
xpathを上手に使うためのコツ
- 属性よりも「ID」「class」を優先する
- 複数の条件により絞り込む(子要素)
まとめ😺
xpathの指定の仕方で、修正を減らすことができるなと感じた。xpathの指定の上手さ=コードを理解してるということなんだなと感じた。