4

Webサイトに接続し、そのサイトにユーザー名とパスワードを入力し、ログインしてから、テーブルをコピーしてExcelに貼り付ける基本的なVBAを作成しました。これで、テーブルにリンク付きのグラフィックが含まれていることに気付きました。前述のテーブルをコピーする代わりに、これらのリンクを個別にたどり、これらのリンク先のテーブルをExcelにコピーしたいと思います。

ただし、Webテーブルのこれらのグラフィックには、個別の直接ハイパーリンクは含まれていません。Webページのソースを表示しましたが、Javascriptが含まれています。(下記参照)

 <a href="#" onclick="var a=function(){javascript:window.open('','ProcStatus','top=50,left=' +     (screen.width - 750) + ',width=700,height=500,resizable,status,scrollbars');};var b=function()    {if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('MainPage'),        {'j_id202:319:j_id208':'j_id202:319:j_id208'},'ProcStatus');}return false};return (a()==false) ?     false : b();"><img src="image.gif" alt="View Details" style="border: 0;" title="View Details" /></a>

これらがソースコードで呼び出す関数を見ることができます。Javascriptについてはゼロを知っていることを念頭に置いて、VBAコードはこれらのリンクを実行/開いてから、テーブルの2行目に移動します。次のリンク?onclick基本的に、イベントに必要な変数を入力し、そのハイパーリンクをアクティブにして新しいWebページを開くにはどうすればよいですか?

そして、そのテーブル内の後続のすべてのリンク?

4

1 に答える 1

1

以下を使用して、VBA から JavaScript 関数を呼び出すことができます。

Call ie.document.parentWindow.execScript("functionName()", "JavaScript")

あなたの場合、次のようになります。

Call ie.document.parentWindow.execScript("var a=function(){javascript:window.open('','ProcStatus','top=50,left=' +     (screen.width - 750) + ',width=700,height=500,resizable,status,scrollbars');};var b=function()    {if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('MainPage'),        {'j_id202:319:j_id208':'j_id202:319:j_id208'},'ProcStatus');}return false};return (a()==false) ?     false : b();", "JavaScript")

または、DOM メソッドを使用してリンクをクリックするようにマクロに指示することもできます。要素がどこにあるかを正確に見つけるには、ソース コードを掘り下げる必要がありますが、一般に、コードは次の行に沿っています。

ie.document.getElementsByTagName("a")[3].click

ここで、3 は「a」要素の配列のインデックスです。

ウェブスクレイピングを効果的に行うために JavaScript のすべてを知る必要はありませんが、いくつかの基本的な DOM メソッドを知っておくと役に立ちます。

  • document .getElementsByTagName -- tableatdtrなどの特定のタグ名を持つ要素を検索しますdiv
  • document .getElementsByName -- 指定された名前の要素を検索します
  • document .getElementById -- 指定された ID を持つ要素を検索します
  • element .innerText -- 要素のテキストを返します
  • element .innerHTML -- 要素の HTML を返します
  • element .click -- 要素をクリックします
  • elementhref .getAttribute("attribute") --またはのような、指定された属性の値を返しますstyle
于 2012-12-10T16:34:41.827 に答える