【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法


button

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けエクセルVBAでIEを操作するシリーズです。

前回はこちらの記事でテーブルの情報を取得する方法についてお伝えしました。

【エクセルVBAでIE操作】WEBページのテーブル要素からセルのデータを取り出す方法
初心者向けエクセルVBAでIEを操作するシリーズです。今回は、エクセルVBAでInternetExplorerを操作して、WEBページのテーブル要素からセルのデータを取り出す方法をお伝えします。

今回は少し趣向を変えまして、IEを操作してWEBページ内の検索窓に任意のキーワードを入力して送信する方法です。

エクセルに検索したいキーワードをリストアップしておいて、それを順番に検索してその結果を取り出す…というようなプログラムが想定できますね。便利そうです。

では、行ってみましょう!

スポンサーリンク

今回のお題:検索窓に任意の文字列を入力して検索

今回は「Yahoo!JAPAN」の検索窓から任意の文字列で検索をしたいと思います。

Yahoo! JAPAN
あなたの毎日をアップデートする情報ポータル。検索、ニュース、天気、スポーツ、メール、ショッピング、オークションなど便利なサービスを展開しています。

検索窓はコチラですね。

Yahoo!JAPANの検索窓と検索ボタン

これをVBAで操作しちゃいましょう。

この検索窓にInputBoxで入力してもらった文字列を入力し検索結果を表示する、というのを今回のお題とします。

検索窓を表す要素を取得する

デベロッパツールで検索窓の要素を調べる

Google Chromeのデベロッパーツールで、それらの要素が何者なのか、そしてどのように取得できるかを見てみましょう。

Ctrl + Shift + I でデベロッパーツールを開いて、上部にある「Select an element…」のアイコンをクリックします。

その後、調べたい要素である検索窓をクリックすると、Elementsのエリアに対象の要素部分のHTMLがフォーカスされます。

Yahoo!JAPANの検索窓

これが検索窓を表す要素ですね。

id属性で要素を取得する

右クリックして「Copy→Copy outerHTML」としますと、このform要素がごっそり取得できます。

この部分を抜粋すると以下の通り。


textタイプのinput要素ですが、id属性がありますね…!

idが振られている場合は、getElementByIdメソッドを使ってHTMLドキュメントの中で一意に要素を掴めるのでとても助かります。

HTMLドキュメント.getElementById(id)

類似の命令で、getElementsByTagNameメソッドや、getElementsByClassNameメソッドなどがありますが、これらはElementsつまり複数形であることに注意してください。取得できるものも1つの要素ではなくて、要素のコレクションになります。

テキストボックスに値を入力する

取得したinput要素はHTMLInputElementオブジェクトとなりますが、そのテキストボックスの値を設定するにはValueプロパティを使います。

HTMLInputElementオブジェクト.Value

この値を書き換えれば、検索窓にテキストを入力できるというわけです。

検索ボタンを表す要素を取得する

同様に、検索ボタンのほうも調べてみましょう。

デベロッパーツールで見てみると…

Yahoo!JAPANの検索ボタン


buttonタイプのinput要素で、こちらもid属性があります。

こちらも、一意に取得可能ですね!

ボタンをクリックする

こちらも、HTMLInputElementオブジェクトになりますが、検索開始をするにはクリックする必要があります。

そのためには、Clickメソッドを使います。

HTMLInputElementオブジェクト.Click

検索窓に入力した後に、検索ボタンをクリックすれば、検索をかけることができるはずです。

これで準備完了です。

IEで検索窓にキーワードを入力して送信するプログラム

以上を踏まえてプログラムを書いてみますとこうなります。

Sub MySub()
    
    Dim keyword As String
    keyword = InputBox("キーワードを入力してください")
    
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    
    objIE.Visible = True
    objIE.Navigate "https://www.yahoo.co.jp/"
    
    Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
        DoEvents
    Loop
    
    Dim htmlDoc As HTMLDocument
    Set htmlDoc = objIE.Document
    
    With htmlDoc
        .getElementById("srchtxt").Value = keyword
        .getElementById("srchbtn").Click
    End With

End Sub

実行しますと、まずInputBoxでダイアログが表示されるのでキーワードを入力してEnter。

Yahooで検索するキーワードを入力

すると、IEが立ち上がり、入力フォームに値が入力され、検索結果ページが表示されます。

Yahooでキーワード検索をした結果

まとめ

以上、VBAでIEで検索窓にキーワードを入力して送信するプログラムについてお伝えしました。

WEBスクレイピングではGoogleChromeの検証機能がとても強い味方になります。検証できて筋道が決まってしまえば、もうプログラムは8割がた完成と言っても良いかも知れません。

ぜひどんどん活用してマスターしてくださいね。

次回はブログの記事一覧を取得する方法についてをお伝えできればと思います。

【エクセルVBAでIE操作】検索結果一覧から記事タイトルを取得する方法
初心者向けエクセルVBAでInterneteExplorer(IE)を操作するシリーズです。今回から何回かにわたって、ブログサイトの記事一覧をWEBスクレイピングで取得する方法をお伝えします。

どうぞお楽しみに!

連載目次:エクセルVBAでIEを操作してWEBスクレイピング

IEを操作してWEBページのデータを取得して、エクセルのデータとして取り込む、つまりWEBスクレイピングをエクセルVBAで実現します。各種WEBページを課題として様々なデータの取得の仕方を解説していきたいと思います。

  1. 【エクセルVBAでIE操作】10分で終わるセッティングとWEBページの閲覧確認
  2. 【エクセルVBAでIE操作】HTMLタグと要素そしてドキュメントの取得
  3. 【エクセルVBAでIE操作】ブラウザの読み込み待ちをしないとダメなのです
  4. 【エクセルVBAでIE操作】ページ内のリンク先URLを全部取得する
  5. 【エクセルVBAでIE操作】ディスクリプションなどの要素をname属性でGetする
  6. 【エクセルVBAでIE操作】hタグなどの要素をタグ名でGetする
  7. 【エクセルVBAでIE操作】WEBページのテーブル要素を自動で取得する方法
  8. 【エクセルVBAでIE操作】WEBページのテーブル要素からセルのデータを取り出す方法
  9. 【エクセルVBAでIE操作】IEで検索窓にキーワードを入力して送信する方法
  10. 【エクセルVBAでIE操作】検索結果一覧から記事タイトルを取得する方法
  11. 【エクセルVBAでIE操作】ブログの記事一覧ページから公開日とカテゴリを取得する
  12. 【エクセルVBAでIE操作】ページャーをめくって複数ページからデータを取得する
  13. 【エクセルVBAでIE操作】ユーザー名とパスワードを入力してログインをする
  14. 【エクセルVBAでIE操作】name属性を利用して画像ボタンをクリックする
  15. 【エクセルVBAでIE操作】alt属性・src属性を利用して画像ボタンをクリックする

コメント

  1. スコ より:

    いつも大変参考にさせて頂いております。本もとても勉強になりました。
    1店伺いたいのですが、htmlの中にidがない場合は、どのように要素をつかめばいいのでしょうか?

  2. スコ より:

    迅速なご返信ありがとうございました。また、もう一件伺いたい事がございますので、お声いただけますと幸いです。
    サイトによって要素を取得できないなどあるのでしょうか?
    あるサイトでname属性で値を入力出来たのだますが、自社の社内システムで同様に取得しようとしたところ失敗致しました。
    このような事象はあるのか、また対策などあるのかお教え頂きたく思います。

    • はい、サイトによっては目的の要素を取得するのが難しいこともあるかと思います。
      こればかりは、サイトの作りや環境に依存してしまうので、解決法は一概には言えません。

      • スコ より:

        やはり、そうした事象はあるのですね。お答え下さりありがとうございました。

タイトルとURLをコピーしました