はてなブログの記事管理画面
で
条件を入れて検索する
前回
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 追記(※アクセス数が増えたので、何かなぁと思ったら・・・ぉぃぉぃ)
三流君のコードは以下のようになっていたのですが
↓--------------------------------------------------
For Each objINPUT In objIE.document.getElementsByTagName("input")
If objINPUT.Value = "検索" Then
objINPUT.Click 'クリック処理↑--------------------------------------------------
現状のはてなの検索ボタンを押すには、
↓--------------------------------------------------
For Each objINPUT In objIE.document.getElementsByTagName("button")
If objINPUT.Type = "submit" Then
objINPUT.Click 'クリック処理↑--------------------------------------------------
以上の点を変更すると、うまく検索してくれるようになりました。
↑とても、ありがたいですね。みなさんも、いろいろとアレンジして使ってみてください。