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

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

よく検索されるキーワード: [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 'クリック処理

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

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

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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)