ken3memo (三流君)

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




[記事一覧、バックナンバーを見る]

2016-03-25

熱心な読者さんに VBA IE操作の本とサイトを教えていただきました

最近、サイト更新はしていないのに、

熱心な読者さんに VBA IE操作の本とサイトを教えていただきました。

Excel VBAでIEを思いのままに操作できるプログラミング術

と一緒に、

上記書籍の著者さんが作成したウェブサイトだと思いますが、

下記のURLを教わりました。

自由が丘のマクロ少女 〜妹に教えてもらう!ExcelVBA講座〜

↑コミPoを使って親しみやすくパワーポイントのプレゼン形式で作成されているみたいです。

私も 見せ方、表現の仕方をメモメモ、参考にしないとなぁ。

(コミPoはもっているのに活用していなかったり・・・)


最近の記事・ネタに強引につなげると

このままやっても、先日書いた記事みたいに

デジタル時代にオリジナルの劣化コピーで稼ぐ 夢を見た ぉぃぉぃ - ken3memo (三流君)

↑たんなる企画・アイデアの劣化コピーになる未来がまっているような・・・


終わりのあいさつ

私みたいな放置プレイヤーに対して、

熱心にアドバイス(燃料?)

を送ってくださった熱心な読者さんに感謝しつつ、

私もコミPoで親しみやすい解説ページ作成を狙ってみようかなぁ、

四月の新人、新入生をねらって・・・

※※いまからじゃ四月スタートに間に合わないんだけど・・・

↑なんていってないで、

1.いつまでも構想練ってます

2.道具だけ揃えて何もやらない

から、

失敗企画・無謀な構想でもとにかくスタートしないとなぁ、、と思いつつ、ではまたぁ。

2013-01-28

XXXXXさんへ IE操作 .getElementsByTagNameで集め .NextSiblingで次を取得してみては?

VBA IE操作で下記の質問をいただきました。


>とあるサイトから、TEL番号を取得したいのです。

>EXCELファイルのB列にURLが100件以上並んでいます。

>そのURLを開いて、TEL番号を取得し、C列に記載…という処理をURLの個数分行うマクロで苦戦しています。

>対象のソースの一部です。

<div class="clContent">

<!--infoBottom-->

<div class="infoBottomArea">

<dl class="clear">

<dt class="ico_place">あああ</dt><dd>いいいい</dd>

</dl>

<dl class="clear">

<dt class="ico_service">ううう</dt><dd>くくうく</dd>

</dl>

<dl class="clear">

<dt class="ico_tel">TEL</dt><dd>03-xxxx-xxxx</dd>

</dl>

<dl class="clear">

<dt class="ico_place">さささ</dt><dd>〒113-0039 東京都</dd>

</dl>

>取りたいのは、【03-xxxx-xxxx】です。

>以下、web上で見つけたものをいじりながら試しているのですが、

>【TEL】の後ろのTEXT(電話番号)が取れません。。。


と質問をいただきました。

DTタグのTELを探し、次の項目DDタグの中身を取得、

そんなサンプルにチャレンジしてみたいと思います。

1.指定したタグ(DT)のデータを集めてみる

2.TELのデータを判断する みつける

3.TELの次(DD)のデータを取得する

の流れで、チャレンジしてみます。

.getElementsByTagNameでDTデータを集めるテスト

1.指定したタグ(DT)のデータを集めてみる

まずは、

.getElementsByTagName

文章ドキュメント

.documentから、DTタグのデータを集めてみます。

Sub ie_test_getElementsByTagName()  'IE getElementsByTagNameをテストする。

'調査項目の入力※手抜きでInputBOX しかもキャンセル処理なし(ぉぃぉぃ)
    Dim strURL As String   '調べたい場所
    strURL = "http://ie.vba-ken3.jp/test/20130128/data001.html"
    strURL = InputBox("調べたい場所(URL)は?", "URL INPUT", strURL)
    
    Dim strTAGNAME As String  '調べるタグ
    strTAGNAME = "dt"
    strTAGNAME = InputBox("調べたHTMLタグは?", "タグ INPUT", strTAGNAME)


'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True      '可視、Trueで見えるようにします。
    
'処理したいページを表示します。 テストページへ移動
    objIE.Navigate strURL
    DoEvents

'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
        DoEvents  '重いので嫌いな人居るけど。
    Wend
    
'.getElementsByTagNameで指定したタグの中身を集めて表示する
    Dim objTAG As Object  'タグ処理用
    Dim n      As Integer  'n番目カウンター
    
    '.getElementsByTagNameで集める(※.getElementsByNameやIDと似てるので注意)
    Set objTAG = objIE.document.getElementsByTagName(strTAGNAME)  'タグの名前で集める
    Debug.Print strTAGNAME & "は" & objTAG.Length & "個ありました"
    If objTAG.Length = 0 Then
        MsgBox "ページに" & strTAGNAME & "タグが無かったよ あれれ"
        Exit Sub  'エラー処理しろよまったく そのままぬけるなオイ
    End If
    
    'For Eachで回せと言われそうだけど
    For n = 0 To objTAG.Length - 1
        Debug.Print objTAG(n).InnerHTML  'テストでタグの中身HTMLを表示
    Next
    
'終了処理
    Debug.Print "--終了"
    MsgBox "終了"
    objIE.Quit    'IE閉じる
    Set objIE = Nothing
    
End Sub

いつものテスト動画: http://www.youtube.com/watch?v=zzQiQFh3FUM

D


.NextSiblingで次の兄弟オブジェクトを代入してみた

.getElementsByTagNameでタグ(DT)のデータを集められたので、

次は、

2.TELのデータを判断する みつける

If objElement.innerTEXT = "TEL"

.InnerTEXTで値を探して、

3.TELの次(DD)のデータを取得する

Set objDD = objElement.NextSibling '次の兄弟エレメントDDを入れる

.NextSiblingで次のオブジェクトを代入してみました。

そんなテストプログラムです。

'NextSiblingを使い、DTの次のDDを取得してみたそんなテスト
Sub ie_test_NextSibling()  'IE NextSiblingをテストする。

'調査URL
    Dim strURL As String   '調べたい場所
    strURL = "http://ie.vba-ken3.jp/test/20130128/data001.html"
    
'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True      '可視、Trueで見えるようにします。
    
'処理したいページを表示します。 テストページへ移動
    objIE.Navigate strURL
    DoEvents

'ページの表示完了を待ちます。
    While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
        DoEvents  '重いので嫌いな人居るけど。
    Wend
    
'.getElementsByTagNameで指定したタグの中身を集めて判断する
    Dim objElement As Object  'タグを1つ1つ取り出し処理する
    Dim objDD      As Object  '結果を入れる(次のタグ DDオブジェクト)
    
    '.getElementsByTagNameで集める(※.getElementsByNameやIDと似てるので注意)
    Set objDD = Nothing  '結果を初期化する。
    'タグの名前DTで集め 1つ1つ取り出して処理を行う
    For Each objElement In objIE.document.getElementsByTagName("dt")
        Debug.Print objElement.innerHTML  'テストで中身HTMLを表示
        If objElement.innerTEXT = "TEL" Then  'テキストが一致するか判断する 探す
            Debug.Print "みつけた"
            Set objDD = objElement.NextSibling  '次の兄弟エレメントDDを入れる
            Exit For    'みつけたのでループを途中で抜ける
        End If
    Next
   
    'TELみつけたか(代入済みか)
    If objDD Is Nothing Then
        MsgBox "TELが見つかりません"
        Exit Sub
    End If
    
    '見つかった時の処理
    Debug.Print objDD.innerHTML
    Debug.Print objDD.innerTEXT
    
'終了処理
    Debug.Print "--終了"
    MsgBox "みつけたTELは " & objDD.innerTEXT & " です"
    objIE.Quit    'IE閉じる
    Set objIE = Nothing
    
End Sub

いつものテストと解説動画: http://www.youtube.com/watch?v=EpXGe7Q77bo

D


おわりの挨拶

.NextSiblingで 次の(Next) 兄弟(Sibling) かぁ...

データの探し方、取得時の指定方法など

使えそうなので .NextSibling 使ってみてください。

以上、

プログラミング言語よりも先に日本語勉強しろと言われている

脳内垂れ流し解説でした(ぉぃぉぃ)

何かの参考となれば、幸いです。 永遠の三流プログラマー Ken3より

2013-01-17

XXXXXさんへ 自動操作除け 画像のボタンを押す方法について

下記のような質問を最近よくいただきます。

>IDとパスワードについては、自動入力できるようになりましたが

>ログインボタンの自動クリックができません。

>ログインボタンが画像になっていて困ってます。

ログインボタンが画像

ロボット除け、先読み除けの処理で、

input type="image"

で、押されたx,yを受け取り、

0,0 左上の場合は、人間はめったに押さないってことで、

相手側でチェックしているのかもしれませんね。

昔から言われていて、私も良い処理方法を思い付いていないのですが、

http://ken3-info.blog.ocn.ne.jp/objie/2009/07/vba_ie_input_ty.html

が似ている問題だと思います。

テスト

http://ken3-info.blog.ocn.ne.jp/test/2007/02/_input_type_ima_3f58.html

↑のイメージボタンを押してもらうと、自動操作防止の流れが見えてくると思います。

ボタンの真ん中を押したように見せかけたいのですが、

私も まだ うまい方法を発見していなかったり

(2009年から 先送りしていたり)

お力になれずスミマセン。

時間も経過しているので、他のサイトなどでもし うまい方法が見つかったら、書き込みます。

親切な人が、解決策をUPしていることを期待しつつ、失礼します。 三流プログラマー Ken3





[記事一覧、バックナンバーを見る]








ブログトップ 記事一覧 ログイン 無料ブログ開設