javascript - 使用 VBA 将表格从 Web 导入到 Excel

标签 javascript excel vba web-scraping dom-events

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

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

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

最佳答案

您可以使用以下命令从 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 -- 查找具有给定标记名的元素,例如 tableatdtrdiv
  • document.getElementsByName -- 查找具有给定名称的元素
  • document.getElementById -- 查找具有给定 id 的元素
  • element.innerText -- 返回元素的文本
  • element.innerHTML -- 返回元素的 HTML
  • element.click——点击一个元素
  • element.getAttribute("attribute") -- 返回给定属性的值,例如 hrefstyle

关于javascript - 使用 VBA 将表格从 Web 导入到 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13794563/

相关文章:

javascript - 使用 Flow 定义对象字面量

vba - 对范围进行排序而不在电子表格中对其进行排序

image - 使用 Excel VBA 调整多张图片的大小和格式

excel - 在 Word 文档中从 Excel VBA 插入换行符

vba - 是否可以在运行时修改 Excel VBA 引用(在运行时加载加载项之后)?

vba - 自动过滤多个不相等的值

javascript - 滚动一次并平滑地将下一个 div 滚动到另一个之上

javascript - 表单提交后无法阻止页面重定向

excel - 转置列

javascript - 在 MapQuest 中拖动标记捕获经纬度