2019.07.22seleniumで要素を取得したいけど、うまく取れない!しっかりデベロッパーツールに書いているのに「そんな要素は存在しません」とエラーを吐きよる、やる気あんのかオイ!と思うこともあると思いますが、ここは気持ちを落ち着かせて、以下の原因を疑ってみて下さい。今回は、seleniumで要素が取得できない時に疑うべき項目を6つ紹介します。・タイプミスを疑う・扱ってるデータ型を疑う・クラスが2つ混ざっていないか疑う・自動操作がダイアログに阻まれてないか疑う・ポップアップウィンドウが発生してないか疑う・iframeのDOM構造を疑うまとめスポンサーリンク・タイプミスを疑う経験的にコレが一番多いです。driver.findをdriver_findのように細かい部分を間違えていないかしっかり見直しましょう。class_nameと指定したのにselectorを入れた、xpathって書いたのにclassを入れたということも、コードが長くなるにつれて多くなるので、コピペをするときはしっかり確認するようにしましょう。・扱ってるデータ型を疑うseleniumはリストや文字列など様々なデータ型を扱います。ボクがミスするのは.textを入れ忘れる、またはfind_elementsに.textを入れることです。画面に”今日は晴れです。"今日の天気は晴れです。"1driver.find_element_by_class_name("todaysweather")=="今日の天気は晴れです。"と書いてしまうとエラーが出ます。"今日の天気は晴れです。"1driver.find_element_by_class_name("todaysweather").text=="今日の天気は晴れです。"と書くことで無事に”今日の天気は晴れです。”と書いてTrueが返ってきます。print(apple.text)12apple=driver.find_elements_by_class_name("apple")print(apple.text)と書き間違えることが多いです。find_elementsで取得した値はリストになっているので、print(apple)と書くとリストが返ってくるだけでなく、よもや.textと文字列をリクエストするとエラーを吐きます。print(i.text)1234apple=driver.find_elements_by_class_name("apple")foriinapple:print(i.text)という風に、for文で一つ一つ処理をしなければいけません。このようにseleniumは指定の仕方でデータ型が変わり、それに合わせて処理を変えないといけませんので、しっかり自分が何を取得したのか把握しておかなくてはいけません。・クラスが2つ混ざっていないか疑うhtmlを書いたことがある人ならば分かると思いますが、htmlのクラス名は一つとは限りません。二つ以上のクラス名が含まれていることは頻繁にあります。それを確認せず全てコピペしてdriver.find_element_by_class_nameに入れるとエラーが出ます。class_nameは2つのクラス名を受け付けないからです。クラス名が2つある場合はhtmlにはスペースが入れられています。入れられていたら必要な方を指定してください。・自動操作がダイアログに阻まれてないか疑う何気なく押しているダイアログも、自動操作をする際には敵になりえます。ヘッドレスでseleniumを起動させて、いつも同じ部分で引っ掛かることに気づき、調べたらダイアログが発生しているという事があります。ログインの時やページを移動するときに多い気がします。seleniumはダイアログを操作する機能を持っているので、これを乗り越えることが出来ます。pass123456fromselenium.webdriver.common.alertimportAlerttry:Alert(driver).accept()except:passアラートを扱うために専用のモジュールをインポートし、accept()など処理を施すことでダイアログのボタンを押すことが出来ます。・ポップアップウィンドウが発生してないか疑う宣伝などで使われるポップアップウィンドウは、場合によって出たり出なかったりします。厄介なのはseleniumはポップアップウィンドウの操作が出来ないという事です。この場合はどうすればよいのか、諦めるしかないのか。試してみた結果、どうも画面の更新で乗り切れるっぽいです。・iframeのDOM構造を疑うseleniumは、iframe要素の中にあるDOMはそのままだとアクセスできません。実際にbet365というサイトでも同様の例で見つかりました。この場合、iframeにdriverを切り替えることで標準では押せなかったボタンが操作できるようになります。selenium?まとめタイプミスから技術的なことまで合計5つの原因に言及しました。IT関係シェアする:TwitterFacebook0はてブ0Pocket0LINELinkedIn魔威駆しれっと更新ブログ関連記事IT関係Ubuntuのストレージ不足が未割り当て領域を見つけて容量2.5倍UP今までちまちまと不要なファイルを削除して慢性的なストレージ不足を凌いでましたが、そもそも未割り当て容量があることを発見して、それを解放して12Gしか使用できなかったUbuntuストレージを一気に30Gまで使用可能にした方法を紹介をします。思ったこと独学でプログラミング学習できない人は教室に通っても挫折するプログラミングを学びたい方は一定数いますが「難しい」というイメージがあるため教室に通ってプログラミングを勉強しようとする方もいるでしょう。...プログラミング【Python】LINEでメッセージを自動で通知させる以前、Gmailでメッセージを送信する方法を紹介しました。GmailとLINEの両方を使い分けることが出来れば良いね。以前、PythonのRobobrowserというモジュールを使ってブログの全記事の名前とURLを取得するプログラムを紹介しました。今回はSeleniumというモジュールを使って、さらに分かりやすく精度の高いスクレイピング&ブラウザ操作が可能であることを知ったのでメモを残します。思ったこと初心者プログラマーだけどレンタルサーバーを使うメリットを語るこの記事を執筆している時点でボクのプログラミング歴は一ヶ月ちょっとですが、その一ヶ月ちょっとの間にレンタルサーバーと契約していて良かったと思うことがあったので、今回はそれについて語ります。そもそも(レンタ...暮らしランサーズで初めてプログラミングの仕事したから感想とか語る実はボクのブログ記事がランサーズの依頼内容で参考として取り上げられたんですね。それをアクセスログで知ったボクが直接依頼を受けるって提案したらOKもらえたんですな。魔威駆IT関係や自転車ロードレースなど手広く扱うブログを運営しています。日本で2番目に有名なマテ茶特化ブログの管理人もやってます。魔威駆IT関係や自転車ロードレースなど手広く扱うブログを運営しています。日本で2番目に有名なマテ茶特化ブログの管理人もやってます。フィクション未分類カテゴリー別人気記事seleniumで要素が取得できない時はこの6つで乗り切れ!2019.07.222020.01.30【Python】スクレイピングで得た情報をGmailで送信する2019.03.212019.07.23【Python3】PycharmからBeautifulSoupをインストール2019.02.032019.03.11【入門】Pythonで初Webアプリ開発!作り方&必要な知識を語る2019.04.292020.01.22【Python】LINEでメッセージを自動で通知させる2019.03.252019.03.27スポンサーリンク。