在 VBA 中滚动网页时等待窗口重新加载

2024-03-04

我编写了一个 VBA 宏来计算 Google 搜索特定术语时返回的(大约)图像数量。我的意思是,程序应该计算返回的图像数量,向下滚动以加载更多图像(如果适用),最多可计算 400 个图像。这是(简化的)代码:

Sub GoogleCount ()

'''
'[Code to construct the URL ('fullUrl')]
'''
    Set objIE = New InternetExplorer
    objIE.navigate fullUrl
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
    Set currPage = objIE.document
    'Count images returned
    newNum = currPage.getElementById("rg_s").getElementsByTagName("IMG").Length
    'Scroll down until count = 400 (max) or no change in value
    Do While newNum >= 100 And newNum < 400 And newNum <> oldNum
        oldNum = newNum
        currPage.parentWindow.scrollBy 0, 100000
        Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
        newNum = currPage.getElementById("rg_s").getElementsByTagName("IMG").Length
    Loop

'''
'[Code to paste the value of newNum into my workbook, and do some other progress reporting]
'''
End Sub

我对滚动感到不高兴,感觉很不舒服'manual',尤其是当您滚动固定值时(使它动态的任何点?即找到页面的末尾并滚动到那里).

但主要问题是它不起作用:当我执行代码时,它会很好地计算前 100 张(或更少)图像。但是当它应该滚动并计数更多时,我得到返回的值 100。使用 F8 慢慢地单步执行代码,我得到了正确的数字(最大 400),这使我得出结论,代码运行得太快(我可能是错的)。

为了减慢代码速度,我尝试添加objIE.readyState检查循环,但因为我只是滚动,所以我不认为它算作页面“重新加载”,因此循环在等待新图像加载时无效。

我想过相反,添加时间延迟。我已经在职了

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

在工作表的其他地方 - 所以,我could添加小至毫秒级的延迟。

但我真的想避免使用它,因为此代码运行于 c。 50 个不同的搜索并且需要足够长的时间才能执行,再加上足够长的固定延迟来适应较慢的连接速度并不理想。此外,互联网速度变化很大,固定延迟非常不可靠 - 我可以进行某种连接测试以获得更好的大概数字,但最好的选择显然只是等待,只要你必须等待。

或者更好找到一种不同的方法来计算图像,最好是不涉及重新加载页面 4 次的方法!有任何想法吗?

注意。如果你想自己调试,可以设置一个很好的图像搜索fullUrl可能是https://www.google.com/search?q=stack overflow|exchange&tbm=isch&source=lnt&tbs=isz:ex,iszw:312,iszh:390因为它返回 >100 个图像但少于 400 个图像,因此您可以测试代码的各个方面


通过进一步的研究,我提出了这种方法:

Dim myDiv As HTMLDivElement: Set myDiv = currPage.getElementById("fbar")
Dim elemRect As IHTMLRect: Set elemRect = myDiv.getBoundingClientRect
Do Until elemRect.bottom > 0
    currPage.parentWindow.scrollBy 0, 10000
    Set elemRect = myDiv.getBoundingClientRect
Loop
myDiv.ScrollIntoView

Where currPage是 HTML 网页(Dim currPage As HTMLDocument) and myDiv是一个特定的元素。类型并不重要,但需要注意的是myDiv始终位于文档的底部and仅在其他所有内容都加载完毕后才加载。因此,对于 Google 图像来说,这是帮助栏,您只有在滚动浏览所有图像结果后才能到达该帮助栏。

怎么运行的

代码的工作原理如下:myDiv.getBoundingClientRect是一种检查元素是否存在的方法visible在浏览器中 - 这就是为什么我们需要查看页面底部的元素,就好像我们滚动直到它变得可见,那么其他所有内容也必须已加载。

这当然就是其中的地方Do Until...Loop来自;我们循环直到elemRect.bottomvalue 不为零(当元素不在视图中时,它为零,一旦在视图中,它就变成非零数字)。更多信息请参阅here https://stackoverflow.com/a/7557433/6609896

最后,使用一个myDiv.ScrollIntoView让浏览器直接到达底部;这是必要的,因为BoundingClientRect轻微可见before该元素位于屏幕上,因此我们需要滚动最后一位才能加载最终图像。

为什么不直接使用ScrollIntoView形成开始?它不起作用,因为该元素尚未加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 VBA 中滚动网页时等待窗口重新加载 的相关文章

  • CSS:仅显示字符串的前两个字母

    是否可以使用纯 CSS 仅显示字符串的前两个字母 到目前为止我已经尝试过 没有成功 first letter 仅针对第一个字母 无论如何对我不起作用 nth of everything 需要额外的 javascript 文本溢出 省略号 正
  • 来自 HTML5 的 Phonegap Bonjour/Zeroconf 或 Websocket IP 发现

    我正在尝试实现一个 Phonegap HTML5 应用程序 该应用程序连接到 Websocket 服务器 在嵌入式设备中运行 也有 Bonjour 服务 以在家庭网络内交换数据 我想知道使用 Phonegap 检测服务器 IP 的最佳方法
  • 如何在 Excel 中对“高”字符进行 HTML 编码或音译?

    在 Excel 中 如何将包含重音字符 大引号等的单元格内容转换为相同字符的 HTML 或音译纯文本版本 我们有一个 XLS 文档 其中包含一些 高 字符 数据已通过数据库连接提取 并且 Excel 似乎正确处理不同代码页中的各个单元格 或
  • 获取 FileReader() 的结果对象

    有什么方法可以在不通过函数的情况下获取 FileReader 的结果对象 我在下面制作了示例代码 HTML br br br div div JS var code lorem ipsum input type file change fu
  • 自定义rc-time-picker的样式

    我在用rc time picker我的项目的包 但我在自定义样式时遇到问题pop up of my time picker成分 这是我的组件的屏幕截图 首先 我需要更改时间的背景颜色item在当时li from light grey 在屏幕
  • 为什么我的淘汰单选按钮在另一个具有点击绑定的元素内时会失败?

    我有一个单选按钮列表 我想要点击 li 他们还检查单选按钮 这一切都有效 直到我放了一个name单选元素上的属性 然后我的代码停止工作 我的代码如下所示 ul li li ul li
  • 如何在更大的 div 中垂直和水平居中一个 div?

    如何将一个 水平居中于另一个 中 我设法使用已接受答案中的样式水平居中 我怎样才能让它垂直居中 内部 div 的高度未知 https stackoverflow com questions 114543 how to center div
  • 使用 css 简单地将对象居中,无需修改

    我想使用 CSS 将对象居中 而不需要任何技巧 这可能吗 如何实现 我已经尝试过了 但是我的 p 标签消失了 centered position fixed top 50 left 50 有多种方法可以使元素居中 但这取决于您的元素是什么以
  • Twitter 卡元标签问题

    有问题的网址 https www halleonard com viewpressreleasedetail action releaseid 10261 https www halleonard com viewpressreleased
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 最大宽度调整以适应文本?

    不是最好的标题 但无论如何 我有一个元素max width和一些文字 如果文本长度超过一行所能容纳的长度 我会得到以下结果 My text here hello everyone 换句话说 它占据了完整的最大宽度 但由于单词向下移动 右侧有
  • 为什么 IE8 在我的图像锚标记上添加底部边框?

    我知道 这很可悲 但今天早上 IT 刚刚在我的机器上安装了 IE8 我立刻遇到了一个明显的问题 尽管我知道答案就在我面前 但我已经把它搞砸了太久了 首先 这是网站 www mchenry edu http www mchenry edu 在
  • 如何选择具有“A”类但不具有“B”类的 div?

    我有一些 div div class A Target div div class A B NotMyTarget div div class A C NotMyTarget div div class A D NotMyTarget di
  • 使用 split 函数到数组中会导致编译错误:无法分配给数组

    我正在尝试使用split 函数根据给定名称字符串中的空格拆分名称 当尝试编译我在下面编写的代码时 出现编译错误 无法分配给数组 我几乎从这里复制了微软的示例 https support microsoft com en us kb 2662
  • Firefox 不会在使用 jQuery AJAX 加载的内容上呈现 CSS 样式

    我有一个网站 允许用户对书籍和文章发表评论 主表单有一个搜索输入 用于查找相关书籍或文章 来源 我使用 jQuery 根据输入的搜索词从外部站点动态加载新源 然后还使用 AJAX 返回列表中的源 我有两个问题 现在 在用户输入四个字符后 j
  • 网站的主体和元素固定在 980px 宽度上,不会缩小

    我试图在 Rails 应用程序顶部启动前端 仅 HTML CSS 页面 但在使用 320px 视口时遇到问题 有些元素不会按比例缩小 我不明白为什么 我已经完成了检查元素 为各种元素提供了max width 100 and or width
  • 可以设置标题样式吗? (并且使用CSS或js?)[重复]

    这个问题在这里已经有答案了 我想知道是否可以设计一个title a href title This is a title Hello a 样式问题有两个方面 文本格式 编码 我猜这是可能的 所以在问题中这样做 工具提示样式 你能把它弄大一点
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 使用css bootstrap时如何仅向一列添加右边框?

    我正在尝试使用CSS引导框架 http getbootstrap com css tables在我的项目中 我正在使用带有以下类的表table table bordered table striped 我想删除除第一列之外的所有列的边框 这
  • 表格行未扩展到全宽

    我有一个表格 当我将表格的宽度设置为 100 并将表格行的宽度设置为 100 时 没有任何反应或宽度发生变化 Table Normal position relative display block margin 10px auto pad

随机推荐

  • 将 NaN 值替换为每列的特定值

    我有一个包含值以及一些 NaN 的数据框 现在我有了列的平均值 我想将特定列的平均值插入到 NaN 值中 例如 ColA 和 ColB 的 NaN 被替换为我有的平均值 https i stack imgur com vAr2p png 我
  • Java 11 迁移:可从多个模块访问包问题

    我正在将 Java 8 项目迁移到 Java 11 使用的 IDE 是 Eclipse 2020 09 我还没有模块化该项目 对于以下进口 import org w3c dom Document import org w3c dom Ele
  • 生成 parquet 文件 - R 和 Python 之间的差异

    我们已经生成了一个parquet文件输入Dask Python 并与Drill R 使用Sergeant包 我们注意到几个问题 的格式Dask i e fastparquet has a metadata and a common meta
  • 将由空格分隔的字符串中的单词分配给变量? C++ [qt] [重复]

    这个问题在这里已经有答案了 我只是想知道将空格分隔的字符串中的单词分配给变量的技术术语叫什么 这样我就可以查找它的教程 任何术语 链接或解释将不胜感激 你可以这样做 QString lineText some sample words QS
  • 在 Sitecore MVC 中的视图中获取媒体 url

    我有一个存储在媒体库中的 mp3 文件 它在项目的媒体字段中被引用 我可以通过在 Web 表单或类中执行 Sitecore Resources Media MediaManager GetMediaURL 来获取 URL 但是如何在 MVC
  • 在 smartGWT 中打开/保存文件

    我已经实现了 RPCService RPCServiceAsync 和 RPCServieImpl 单击按钮后 将调用服务器端的服务 它将从数据库中获取数据并创建文件 创建文件后 我需要在客户端打开该文件 并需要提示一个包含打开 保存选项的
  • ServiceStack - 依赖关系似乎没有被注入?

    我有以下存储库类 public class Repository
  • 微服务架构中的数据库位置

    我们有一个整体应用程序 现在正在使用容器将其转换为微服务架构 我们的微服务是stateful 即他们需要从数据库插入 检索数据 根据微服务架构 每个微服务应该有自己的数据 即我们案例中的数据库 我的问题是where应该部署每个微服务的数据库
  • 实体框架数据库优先与 Oracle 数据库

    我正在开发一个 ASP NET WebForms 应用程序 其中实体框架数据库优先与 SQL Server 连接 并且我想将相同的实体数据模型与 Oracle 数据库连接 我的担忧是 如何在我的开发机器上安装 Oracle 数据库引擎进行测
  • 使用用户定义的运行时属性的 UIView Shadow

    当我使用 用户定义的运行时属性 时 我很难显示阴影 如果我使用代码 它似乎工作完全正常 如下所示 func formatView view UIView cornerRadius Bool if cornerRadius view laye
  • Python Selenium Javascript链接点击无法执行

    我将 Selenium for Python 与 PhantomJS Ghost 驱动程序一起使用 以便单击 href 中包含 Javascript 的链接 例如来自this https structuredginniemaes ginni
  • MongoDB 根据 _id 统计每分钟新文档数

    我想创建每分钟存储多少新文档的统计数据 由于具有标准 ObjectID 的 id 字段已经包含文档创建的时间戳 我认为应该可以以某种方式使用它 在 Stackoverflow 上 我发现了以下映射归约代码 可以在有用于创建数据的专用字段时完
  • 从具有特定窗口坐标的命令行启动 Google Chrome

    我正在尝试找到一个 shell 命令 该命令将使用特定的 x 和 y 坐标打开 Google Chrome 以便我可以在窗口打开时设置窗口的位置 是否可以使用命令行参数来执行此操作 我需要修改以下命令才能实现此目的 google chrom
  • python中不均匀的子图

    在 python 中创建 3 3 子图矩阵的最佳方法是什么 第一列包含 3 个子图 第二列包含 3 个子图 第三列包含2 个次要情节 最后两个子图应具有相同的大小 这意味着它们将在其他两列的中间图的中间相遇 我尝试使用 gridspec 来
  • 当应用程序未处于焦点或位于另一个选项卡中时,WaitForSeconds 停止工作

    我用 Unity 制作了 WebGL 游戏 不需要每个帧都进行一些计算 因此我将它们放在协程中 但当游戏在后台运行时 协程的工作速度会比平时慢 并且会额外等待 5 10 秒 例如 士兵跑向我 我向他们发射子弹以杀死他们 当他们进入射程时 他
  • 引导程序上的下拉子菜单不起作用

    我只是想问为什么引导程序上的下拉子菜单不起作用 我只是按照此链接中的说明操作 http getbootstrap com 2 3 2 components html http getbootstrap com 2 3 2 component
  • 从 shell 脚本将密码输入 openssl 命令

    我正在尝试将 p12 从 shell 脚本转换为 pem 无需任何用户输入 我可以将密码作为脚本中的变量 所以当我打电话时 openssl pkcs12 in p12 out cert pem nodes 终端打印 输入导入密码 并等待输入
  • Jersey 2.x 自定义注入注释与属性

    我正在从 DropWizard 0 7 1 迁移到 0 8 1 这包括从 Jersey 1 x 迁移到 2 x 在我的 使用 Jersey 1 18 1 的实现 我有一个MyProvider 为了简单起见 更改了所有类名 实现Injecta
  • 如何避免SRP混乱?

    通过应用 SRP 原则 您必然会有很多课程 如果这对于小型项目来说效果很好 那么您如何处理和组织大型项目中的类数量 你如何组织文件夹结构 你怎么记得你建造了什么 你怎么知道其他人是否没有在其他类中构建相同的功能 这适用于所有类型的图书馆 不
  • 在 VBA 中滚动网页时等待窗口重新加载

    我编写了一个 VBA 宏来计算 Google 搜索特定术语时返回的 大约 图像数量 我的意思是 程序应该计算返回的图像数量 向下滚动以加载更多图像 如果适用 最多可计算 400 个图像 这是 简化的 代码 Sub GoogleCount C