三流君のソースコード置き場

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


ブログの記事管理 検索条件に値を入れて検索ボタンを押し編集記事を探す

はてなブログの記事管理画面

条件を入れて検索する

前回
ken3code.hatenablog.jp
の 続きです。


そんな処理を作成してみたいと思います。
デバック、いきあたりばったりのプログラミングを笑ってください。

数行のコードを下記でダラダラと動画解説をしています。
https://www.youtube.com/watch?v=_L2v_i-UJsY
www.youtube.com
↑ダメッぷりを笑いながら見てください

1.やりたいこと手作業で説明

2.VBAで作成してみる

まず、セットしたい項目をあらいだす。
記事画面のページでhtmlソースを表示して
検索の周りを探して、Formを見つけます。

      <form class="entry-search-form js-entry-search-form" role="search" action="/search" method="get">
        <select name="category" class="js-categories-selector">
          <option value="" >カテゴリー</option>
          
        </select>
        <input type="search" name="q" 
class="entry-search-input js-entry-search-box-input" 
value="" placeholder="記事を検索">

        <input type="submit" value="検索"
 class="entry-search-button btn">

      </form>

input type="search" name="q" にデータをセットしたかったので、

    '検索データをセットする
    objIE.document.all("q").Value = "movie:w560"

で単純にセットしてみたり、

ボタンに名前が付いていなかったので、

    '検索ボタンを押す
    'INPUTのタグを探す
    Dim objINPUT As Object
    For Each objINPUT In objIE.document.getElementsByTagName("input")
        Debug.Print objINPUT.Value
        '検索ボタンを見つけて押す
        If objINPUT.Value = "検索" Then
            objINPUT.Click  'クリック処理
            DoEvents
            Exit For
        End If
    Next

.getElementsByTagName("input")
で頭から、
.Value = "検索"
を探して実行(クリック)してみました。

前回含め、ソースコード全体

Option Explicit

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'IEオブジェクトを受け取り、表示を待つ
Sub IE_WAIT(objIE As Object)

    Sleep 250  '0.25秒待つ

    'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
        'DoEvents  '重いので嫌いな人居るけど。
        Sleep 200  '0.2秒待つ
    Wend

    Sleep 250  '0.25秒待つ

End Sub


'検索テスト 後 更新処理を追加してみた
Sub testブログ記事検索後本文更新()

    'オブジェクトを格納する変数
    Dim objShell As Object, objWindow As Object

    Dim objIE As Object  '捕まえたIE
    
    Set objIE = Nothing  '初期化

    'シェルのオブジェクトを作成する
    Set objShell = CreateObject("Shell.Application")
    
    'ウインドウの数だけまわすぞ
    For Each objWindow In objShell.Windows
        'TypeNameでオブジェクト変数のタイプを表示する
        Debug.Print "タイプは:" & TypeName(objWindow.document)
        'HTMLDocumentだったら
        If TypeName(objWindow.document) = "HTMLDocument" Then
            'URLとタイトルを表示する
            Debug.Print "タイトル:" & objWindow.document.Title
            Debug.Print "URL:" & objWindow.document.Url
            'https://blog.hatena.ne.jp/ken3memo/ken3memo.hatenablog.com/entries
            If InStr(objWindow.document.Url, "/entries") > 0 Then 'URLの中に/entriesがあるか
                Set objIE = objWindow   '代入する
                Exit For  '見つけたのでループを抜ける
            End If
        End If
    Next
    Set objShell = Nothing

    'URLが見つかったか判断
    If objIE Is Nothing Then
        'メッセージ表示、終了
        MsgBox "登録するIEのページがみつかりません"
        Exit Sub
    End If

    'MsgBox objIE.document.Title & "を見つけたよ"


    '検索データをセットする
    objIE.document.all("q").Value = "movie:w560"
    
    '検索ボタンを押す
    'INPUTのタグを探す
    Dim objINPUT As Object
    For Each objINPUT In objIE.document.getElementsByTagName("input")
        Debug.Print objINPUT.Value
        '検索ボタンを見つけて押す
        If objINPUT.Value = "検索" Then
            objINPUT.Click  'クリック処理
            DoEvents
            Exit For
        End If
    Next
    
    Call IE_WAIT(objIE)   '検索終了待つ
    
    'MsgBox "検索おした、結果待ち"
    
    '編集処理を押す
    'INPUTのタグを探す
    Dim objA As Object
    For Each objA In objIE.document.getElementsByTagName("a")
        Debug.Print objA.href
        'リンク先URL entry=を見つけて押す
        If InStr(objA.href, "entry=") > 0 Then
            objA.Click  'クリック処理
            Exit For
        End If
    Next
    
    Call IE_WAIT(objIE)   '編集画面の起動を終了待つ

    'データをセットする
    objIE.document.all("body").Value = Replace(objIE.document.all("body").Value, ":movie:w560", ":embed:cite")
    
    '更新ボタンを押す
    objIE.document.all("submit-button").Click '更新ボタンをクリック
    
    'MsgBox "更新終了"

End Sub


2020/05/21 追記(※アクセス数が増えたので、何かなぁと思ったら・・・ぉぃぉぃ)

www.mypath-as-variant.com
より

三流君のコードは以下のようになっていたのですが

↓--------------------------------------------------

For Each objINPUT In objIE.document.getElementsByTagName("input")
If objINPUT.Value = "検索" Then
objINPUT.Click 'クリック処理

↑--------------------------------------------------

現状のはてなの検索ボタンを押すには、

↑とても、ありがたいですね。みなさんも、いろいろとアレンジして使ってみてください。


質問・感想・クレームなど、
気軽にコメント欄に書いてもらえるとうれしいです。

[Googleフォームにコメントを残す]
↑質問・コメントの入力フォームです、気軽に書いてください


フッター:最後にKen3Videoの動画一覧を紹介します

YouTubeにアップした動画です。他の動画を一瞬でも見てもらえるとさらに嬉しいです。
再生リスト:[三流君Ken3の最新動画]←リストの一覧形式で表示する


また、ブログを見に来てくださいね。ではまたぁ~