使用VBA将表从Web导入Excel

时间:2012-12-10 03:22:09

标签: excel excel-vba javascript-events web-scraping vba

写了一些连接到网站的基本VBA,输入用户名和密码到该站点,登录,然后复制表并将其粘贴到excel中。现在我意识到我的表包含带链接的图形。我没有复制前面提到的表,而是希望单独关注这些链接并将这些链接的表复制到excel中。

但是,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代码将如何执行/打开这些链接,然后转到表中的第二行,到下一个链接?基本上,如何填充onclick事件所需的变量,然后激活该超链接以打开新网页?

然后该表中的每个后续链接?

1 个答案:

答案 0 :(得分: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在webscraping中有效,但它有助于了解一些基本的DOM方法。

  • document .getElementsByTagName - 查找具有给定标记名的元素,例如tableatdtr,{{ 1}}等等。
  • 文档 .getElementsByName - 查找具有给定名称的元素
  • 文档 .getElementById - 查找具有给定ID的元素
  • 元素 .innerText - 返回元素的文本
  • 元素 .innerHTML - 返回元素的HTML
  • 元素 .click - 点击元素
  • 元素 .getAttribute(“attribute”) - 返回给定属性的值,如divhref