C#のSeleniumでGoogle検索~注意点とその解決方法~

この記事は以下のような方におすすめです。
- C#を使ってgoogle検索したい
- google検索結果をスクレイピングしたい
※注 本記事ではGoogle Chromeでのスクレイピングを前提としています。
その他のSeleniumに関する記事は
・C#でWebスクレイピングに挑戦!!
この記事を書こうと思った背景
googleの検索結果をスクレイピングしようと思ったところ、
検索が上手くできす例外が発生するという事象に見舞われたので
ここで解決方法を皆さんに共有したいと思った次第です。
この点については意外と触れられてなかったりするので詰まってる人は参考にして下さい。
Seleniumでgoogle検索できない?
Seleniumでgoogle検索をしようと思ったところ
検索ボタンを押す段階で例外が発生し、処理が止まってしまう現象が発生しました。
その時に書いたコードが以下のコード
例外が発生したコード
パッと見たところ問題内容に思われますが、実はこのコードにも問題が潜んでいました。
久しぶりにこういう事象に遭遇したのでなんだかワクワクします。
例外発生の原因はgoogleの予測変換!!
さて、こんな事象が起きたときはまずVisual Studioならブレークポイントを設定して
地道にデバックでしょう(余談ですが管理人はこのデバックが結構好きです。その理由はまた後日)。
デバックを進めるとやはり検索ボタンを押すところで不具合が起きています。
色々理由を考えましたが、普通に操作した場合は特に問題は発生していない。
かつ、プログラムの場合のみ例外が発生しているということで、着目したのが予測変換です。
予測変換はプログラムの自動入力でも表示されるのですが
なんと予測変換が表示されることで検索ボタンが隠れてしまっています。
予測変換が表示されている状態
この予測変換によって検索ボタンが隠れてしまったことで
検索ボタンが見つけられず例外が発生してしまったと思われます。
(Seleniumがここまで認識しているとは驚きでした。)
例外発生の回避方法
さて、例外の原因が判明したところで、次はこの例外が発生しないようにするための回避策を
考えていきます。管理人が考えた回避策は以下の2点です。
- 予測変換が表示されないようにする
- Enterキーを入力して検索する
予測変換が表示されないようにするといった方法が一番手っ取り早いかと思いますが
普段のGoogle Chromeの利便性を損なう気がするので今回はEnterキーを入力する方法を採用しました。
キーボードから検索ワードを入力して、Enterで検索という皆さんがいつもやっているような手順です。
この改修を加えたコードが以下のコードです。
改修コード
このコードを実行すると無事にgoogle検索が出来ました。
後は表示されたページから必要な情報をスクレイピングで取得するだけです。
最後に
今回はgoogle検索で例外が発生し久しぶりのデバックでした。
やはりこういう不具合や異常事象の探求をしていくのは面白いですね。
プログラミングの醍醐味とも言えるのではないでしょうか?
Seleniumが表示もしっかり加味しているとは知らなかったので
今回の挙動には驚かされました。
皆さんもこういう事象に出会ったときは慌てずじっくり取り組んでいきましょう。
意外と答えはシンプルだったりします。
それでは今回はこの辺で
