- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在运行一个 Excel VBA 宏,该宏从 this webpage 收集信息。要显示定价信息,您需要单击页面中间右侧标有“5 盎司 - 4 件”的框。单击该框后,会出现一个弹出窗口,其中包含所需的信息。
我的问题是我一直无法弄清楚如何以编程方式单击此框。
从检查页面元素来看,似乎以下元素
<a class="os_opt_dd" href="#"><span class="os_opt_dd_s">5 oz. - 4 Count</span><input tabindex="-1" value="1144"></a>
包含生成弹出窗口的可点击元素,但是当我尝试以编程方式单击它时(如下面所示的代码所示),什么也没有发生。
my_url="http://www.omahasteaks.com/product/Bacon-Wrapped-Filet-Mignons-4-5-oz-01144?ITMSUF=WZB"
Set ie = CreateObject("InternetExplorer.Application")
With ie
.Visible = True
.navigate my_url
.Top = 50
.Left = 530
.Height = 400
.Width = 400
End With
ie.document.getelementsbytagname("a")(0).Click
当我尝试使用以下代码循环遍历页面上的所有元素时,我能够单击该框并生成弹出窗口。但如果我刷新网页,生成弹出窗口的 x 值就会不同。
For x = 0 To ie.document.all.Length - 1
ie.document.all.Item(x).Click ' x=1101, 1103 and 1190, 1223 often seemed to generate the pop-up
Next
有人可以告诉我如何以可重复的方式单击该框吗?
最佳答案
如果您遵循click
事件堆栈跟踪您会发现此网页中发生了很多事情。尤其是似乎有三个独立的跟踪器脚本,它们似乎需要 Hook DOM 事件才能运行。我冒昧提出一个导致您出现明显问题的建议。
我说明显是因为可以通过 javascript 强制您想要触发的事件页面上的自动化。具体jquery对于我提出的解决方案。 jquery正在页面上运行,并且是此 Web 应用程序的事件处理不可或缺的一部分。
jquery有一个trigger
方法-文档here - 上面写着:
As of jQuery 1.3, .trigger()ed events bubble up the DOM tree
我不相信vba基于这样的代码:ie.document.foo.Click
- 在您的情况下,导致事件传播。因此,让我们基于运行必要的 jquery 来制定解决方案。 trigger
以编程方式创建的 IE session 中的脚本。
特别的<a>
您想要自动化的标签( anchor )具有 os_opt_dd
类。页面上有 13 个这样的 anchor (具有相同的类别),您想要最后一个。可能有更好的方法来隔离 anchor (可能基于父 <div>
),但我将其作为练习留给您。
所以 jquery提供自动化的代码如下:
// get the HTML element we want to automate
var anchor = $('a.os_opt_dd')[12];
// trigger the mousedown event on this anchor element
$(anchor).trigger('mousedown');
单行文字如下:
$($('a.os_opt_dd')[12]).trigger('mousedown')
请注意,我们需要触发 mousedown
事件而不是 click
事件。这是因为(IMO)事件传播是由用户操作的第一个事件触发的,例如在文档的特定元素上按下鼠标按钮。如果你在 Stack Overflow 上进行 Google/搜索,那么你会发现很多关于点击/事件/jQuery 等主题的线程/讨论,这些都是有用的阅读 Material 。如果你问jquery专家如果有更好的方法来编码,我完全希望他们能想出更好的东西;)
无论如何,最后,我们的excel-vba代码将是:
Option Explicit
Sub TestWithEarlyBinding()
Dim strUrl As String
Dim strJquery As String
Dim objBrowser As InternetExplorer
Dim objDocument As HTMLDocument
On Error GoTo CleanUp
'url and jquery required for automation
strUrl = "http://www.omahasteaks.com/product/Bacon-Wrapped-Filet-Mignons-4-5-oz-01144?ITMSUF=WZB"
strJquery = "$($('a.os_opt_dd')[12]).trigger('mousedown')"
'create IE
Set objBrowser = New InternetExplorer
'browse to page and wait for load
objBrowser.Visible = True
objBrowser.navigate strUrl
While objBrowser.readyState <> READYSTATE_COMPLETE 'READYSTATE_COMPLETE =4
DoEvents
Wend
'force jquery event on document
Set objDocument = objBrowser.document
objDocument.parentWindow.execScript strJquery, "JavaScript"
CleanUp:
If Err.Number <> 0 Then
Debug.Print Err.Number & ": " & Err.Description
End If
'objBrowser.Quit
Set objDocument = Nothing
Set objBrowser = Nothing
End Sub
注意我使用了早期绑定(bind),因为使用后期绑定(bind)来测试这个问题的解决方案是很痛苦的。所需的引用资料是:
替代方案jquery trigger
不依赖于列表中第 13 个 anchor 标记,将使用以下代码:
$('#right_sku_form').find('div#selector-PAR-00000009957').find('a.os_opt_dd').trigger('mousedown')
find()
函数向下搜索 DOM 树。
<form>
与 id
的right_sku_form
<div>
与 id
的selector-PAR-00000009957
<div>
我们的 anchor 是 class
的a.os_opt_dd
关于jquery - 单击 HTML 元素并生成弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38808191/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!