Pythonの応用

Seleniumでソース上にあるのにClass属性が取得でエラーになるとき

selenium-class-error

Pythonではブラウザ(GoogleChromeなど)を自動化できます。

自動化する方法としてSeleniumがあります。

詳しい導入やインストール方法は下記のサイトにあります。

 

今回はこのSeleniumを使ってClass属性を取得する時にソース上では取得したいClass属性はあるのに、Seleniumで行うとエラーになる。という現象の解決方法について説明します。

HTML上でのClassの書き方

Pythonは分かるけどHTMLは浅くしかやってないという方もいると思うので説明します。

例えばツイッターのソースを見てみます。

selenium-class-error1

この要素部分に注目してみます。

このように書いてありますね。

Class属性だけを見るとこう書いてあります。

こうですね。

実はこれ3つのクラス属性を読み込んでいるのです。

HTMLでは空白(スペース)を使って、クラスを指定します。

よくやってしまいがちなミス

上記のことを知らずに次のように書くとエラーとなります。

このように書くと「Class属性が見つからない」というエラーが発生します。

正しくは下記です。

クラスは1つしか探せません。

ネット上ではよくXPathが使われるようですが、Xpathはツイッターのような更新の多いサイトでは使えません。

またCSSセレクターを取得する方法もツイッターのようなサイトでは度々変わるので使いにくいです。

elementとelementsは違う

上記のサイトでは説明されてなかったので追加でこれも説明します。

それは見出しにもあるように、elementとelementsは違うということです。

  • elementで取得すると最初に見つけたものしか取得しない
  • elementsで取得すると全て取得する(リストになる)

ということです。

実際にやってみましょう。まずはelementです。

結果は次のようになります。

次にelementsで書いてみましょう。

結果は次のようになります。

分かりにくいかもしれませんが、elementsで取得すると大括弧[ ]で囲われているのが分かります。
つまりこれは、リストで取得したということです。

Class属性で取得した方がXpathよりメンテナンスがラクになる

今回はClass属性の取得でやりがちなエラーについて解説しました。

Class属性はよっぽどサイトが大きく変わらない限り変わることはありませんが、
Xpathはかなり特定した書き方なので変わる可能性があります。

ですので僕はClass属性を指定して取得していく方法をお勧めします。

もっと効率よくプログラミングを学びたいなら

プログラミングをもっと早く、しかも基礎をしっかり固めたいという方はプログラミングスクールを利用することをオススメします。

TechAcademyは自宅で学べるオンライン型のスクールです。
無料体験から始めることができ、Pythonやウェブデザイン、アプリケーションの製作方法などを学べます。

TechAcademyを無料体験する