質問: driver.find_element_by_xpath("/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/div[1]") File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\test\remote\webdriver.py", line 321, in execute self.error_handler.check_response(response) File "C:\Users\test\AppData\Local\Programs\Python\Python38-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[4]/div[2]/div[1]/div[3]/div[1]/div[1]"} (Session info: chrome=88.0.4324.150) [15512:18424:0215/181159.096:ERROR:device_event_log_impl.cc(211)] [18:11:59.096] Bluetooth: bluetooth_adapter_winrt.cc:1072 Getting Default Adapter failed. ``` わかる方いらっしゃいましたらご教示願います。 お手数ですが、宜しくお願いいたします。
回答: エラーメッセージの通り、貴方の実行環境では指定したXPATHの内容が存在しないのでしょう。 こちらで試したところでは、まず以下2行の`import`が不足して動かなかったので、質問のソースで動作していたというのならば、色々と環境や版数の違いがあるのかもしれません。 ``` from selenium.webdriver.chrome.options import Options from datetime import datetime as dt ``` こちらの環境は以下の通り Windows10 64bit 64bit python 3.9.1 selenium 3.141.0 Chrome 88.0.4324.150 ChromeDriver 88.0.4324.96 pandas 1.2.2 また結果の表示は`print(e)`ではなく`print(e.text)`で行います。 質問のXPATH: `'/html/body/div[1]/div[2]/div/div/div[2]/main/div/article/div/div/div'` 動作出来るようにしたときの結果はこちら。 ``` ID非公開 ID非公開さん 2016/9/21 22:39 1回答 SNSデータをクローリング(webスクレイピング)するにはpython,rubyどちらがいいか SNSデータをクローリング(webスクレイピング)するにはpython,rubyどちらがいいか プログラミング | Ruby・147閲覧 共感した ``` 回答も含められるように変更したXPATH: `'/html/body/div/div[2]/div/div/div[2]/main/div/article'` ちなみに質問に書かれた「取得したいテキスト」の内容にそのまま合致するようなXPATHは無いかもしれません。 以下のようになりました。 ``` ID非公開 ID非公開さん 2016/9/21 22:39 1回答 SNSデータをクローリング(webスクレイピング)するにはpython,rubyどちらがいいか SNSデータをクローリング(webスクレイピング)するにはpython,rubyどちらがいいか プログラミング | Ruby・145閲覧 共感した ベストアンサー このベストアンサーは投票で選ばれました cha******** cha********さん 2016/9/21 22:54 どちらでも可能ですし結果に大した違いもないでしょう。 お好きな方でどうぞ、としか... ナイス! ID非公開 ID非公開さん 質問者 2016/9/22 7:28 pythonは自然言語処理(人工知能)のライブラリが豊富で強く、 相乗的に、pythonに軍配があがると思いますが、 どう思いますか? さらに返信を表示(2件) ``` もしかしたら Jupyter notebook とかで実行していると`print(e)`だけで取得した結果の内容が書式付きで表示されるのかもしれませんが、それは試していません。 そういう環境であるならば、その辺の条件も質問に追記しておいた方が良いでしょう。 **コメント対応** > > 度々、すいません。こちら”SNSデータをクローリング(webスクレイピング)するにはpython,rubyどちらがいいか”を2回分表示されますが、1回のみ表示する方法ありますか > > > これは、該当記事のXPATHで取得した`html`の中で、質問の文言が`h1`タグと、その下の`div`の両方に書かれているからです。 本当にその文言だけを取得したいのなら、以下のXPATHを使えば出来ます。 `/html/body/div/div[2]/div/div/div[2]/main/div/article/div/div/div/div[2]/div/div/div/div` 以下のようになります。 ``` e=driver.find_element_by_xpath('/html/body/div/div[2]/div/div/div[2]/main/div/article/div/div/div/div[2]/div/div/div/div') print(e.text) ``` その代わり、質問者のID/名前、質問日時、回答件数、分類、閲覧数といったデータは取れなくなります。 またXPATHを使うやり方は、このサイトではあまり汎用性が無いかもしれません。 例えば別のこの質問で同じ内容を取得するには: こちらのXPATHを指定する必要があります。 `/html/body/div/div[2]/div/div/div[2]/main/div/article/div/div/div[1]/div[3]/div` 同様にこちらの質問の場合は: こちらのXPATHを指定する必要があります。 `/html/body/div/div[2]/div/div/div[2]/main/div/article/div/div/div/div[2]/div/div/div[1]/div` 中には同じXPATHを使い回せる質問もあるようですが、@metropolis さん回答の方式の方が汎用性があるかもしれません。 調べてみてください。