使用VBA将表格从Web导入Excel

写了一些连接到网站的基本VBA,input用户名和密码到该网站,login,然后复制一个表格,并将其粘贴到Excel中。 现在我意识到我的表格包含带有链接的graphics。 而不是复制前面提到的表格,我想单独遵循这些链接,并将这些链接的表格复制到excel中。

但是,Web表格中的这些graphics不包含单独的直接超链接。 我查看了网页的源代码,它包含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事件所需的variables,然后激活该超链接来打开新的网页?

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

您可以使用以下命令从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") 

或者,您也可以指示您的macros使用DOM方法单击链接。 你将不得不挖掘源代码来找出元素的位置,但是一般来说,你的代码将会沿着以下几行:

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

其中3是“a”元素数组的索引。

你不需要知道一大堆javascript在webscraping上有效,但它有助于了解一些基本的DOM方法。

  • document.getElementsByTagName – 查找具有给定标记名的元素,例如tableatdtrdiv等。
  • 文档 .getElementsByName – 查找具有给定名称的元素
  • document.getElementById – 查找具有给定id的元素
  • element .innerText – 返回元素的文本
  • 元素 .innerHTML – 返回元素的HTML
  • 元素 。点击 – 点击一个元素
  • 元素 .getAttribute(“attribute”) – 返回给定属性的值,如hrefstyle