質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

519閲覧

VBAでIEの属性タグ取得について

altooo

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/06/20 06:35

編集2021/06/20 08:26

以下のようなHTMLが直接記述されていないサイトのaタグ属性を取得するにはどうしたらよいでしょうか。
https://www.buzzvideo.com/user/6676852899450864646/publish

やりたいこととしては、一つ一つの動画のリンク(aタグ)の値を取得したいです。
IEで取得しようとしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

HTMLが直接記述されていないということがどういう意味なのかが分かりませんが、IEを使用されているのであれば、動画に移動する部分にマウスカーソルを合わせて、右クリックし、「要素の検査」を押していただくと、「f12開発者ツール」という以下の画像のような画面が開き、その画面でおっしゃっているHTMLの内容が確認できるかと思います。
イメージ説明
今回の目的は「一つ一つの動画のリンク(aタグ)の値を取得」ですので、こちらの内のどの要素が必要なのかを吟味する必要があるかと思います。
今回の動画のリンクは、以下の画像の中で、赤枠で囲んだ部分になるかと思われます。
イメージ説明
左上の「F12」と書かれた部分のすぐ下にあるマウスカーソルが書いてあるマークを押してから、IEの画面にカーソルを合わせて右クリックを押すと、その部分がHTMLのどの記述によって表現されているのかが分かりますのでもしよろしければ、お試しください。
この赤枠の中身を見ると、aタグの中のhref属性に、httpなどが書かれていない一見リンクに見えない文字列が入っていることが分かります。例えば、「/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4」という文字列ですね。
これは、相対パスといって、リンクを表す方法の内、「http://〇〇〇〇.〇〇」といった「ドメイン」と呼ばれる部分が省略された、そのリンクの続きの部分になります。
このサイトの場合は、ドメインの部分が「https://www.buzzvideo.com」になっているようです。
例えば、このサイトの一番上に表示されている動画のあるリンクは、「https://www.buzzvideo.com/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4」と表現されます。
これは、赤枠で囲んだ一番上の部分のaタグの中のhref属性の中身(/@可愛すぎる動物癒し系動画/これこそ最強のコンビ-【癒し】-BgKAEB73xF4)を、ドメイン部分(https://www.buzzvideo.com)に結合したものです。
つまり、赤枠で囲んだ部分のhref属性の中身と、ドメイン部分を結合したものが、今回取得したいものであるとわかります。

 ここまで、状況を整理すれば、あとはvbaコードまで落とし込めば終わりです。

 vbaでは、IE操作をするために、オブジェクト型の変数にIEを格納(?)して操作します。
今回は、当該サイトを開いているIEが既に立ち上がっており、他のIEのウィンドウが開いていない前提でコードを記述します。Windowsにあるシェルの機能を用いて今立ち上がっているウィンドウの配列を引っ張れるのが、objShell.Windowsの部分に当たります。その配列の中にある「Internet Explorer」と名前がついたウィンドウの内一番最初に見つかったものをobjIEに格納します。
以下のコードは、下記のリンクのサイトをほぼ丸パクリしたものです。
参考サイト1

 ```vba
Dim objIE As Object
Dim objShell As Object
Dim tmp As Object

 Set objShell = CreateObject("Shell.Application")
For Each tmp In objShell.Windows
If tmp.Name = "Internet Explorer" Then
Set objIE = tmp
Exit For
End If
Next

 これで、操作したいIEの画面をobjIEの中に格納したくらいに考えてください。  次にaタグの中のhref属性を上から順番に出していきます。  以下のコードは、[参考サイト2](https://www.vba-ie.net/element/linkurl.php)をほぼ丸パクリしたものです。  document.Linksで、HTMLの中のaタグがすべて入った配列になるっぽいです。ここは詳しくないので、ご自分でお調べいただければ幸いです。aタグのテキストをaタグも含めて出すのが、outerHTMLだそうです。この文字列の中に、このHTMLのタイトル(可愛すぎる動物癒し系動画)が入っているかを判定します。タイトルは、headと書かれている部分の白い三角を押せば以下のような画面が出てきますので、titleタグを見つければわかります。 ![イメージ説明](1a5d0f968584b91a10df546ff8d6f690.png)  次に、href属性の中身をA列に上から順番に出力しています。すいません、この辺りは、もっと詳しい人に聞いてください。    ```vba Dim objLink As Object Dim i As Long i = 1 For Each objLink In objIE.document.Links If InStr(objLink.outerHTML, "可愛すぎる動物癒し系動画") > 0 Then Range("A" & i) = objLink.href        i = i + 1 End If Next

 上記二つのコードを一つのSubプロシージャの中に記述して実行すれば、赤枠で囲んだ部分のhref属性の中身と、ドメイン部分を結合したものA列に上から順番に出力されます。

 今回のようなご質問をなさる前に一旦、「vba IE操作」などでお調べいただければ、多くの参考資料が見つかります。まずは、グーグルで一度検索されて、一通りお調べになってからわからない部分を明確化し、一旦自分でコードを書かれた方が私よりも詳しい方々が的確なご回答をしていただけると思いますので、もしよろしければ、そのようにご対応いただければ幸いです。

投稿2021/07/17 16:09

omuricesuki

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問