【问题标题】:JavaScript programatically hover mouse over elementJavaScript 以编程方式将鼠标悬停在元素上
【发布时间】:2013-07-14 00:28:01
【问题描述】:

我正在编写一个 vb.net 程序来自动化和管理在线游戏。我正在使用 Awesomium 网络控件来显示和操作游戏页面。

有一点我需要抓取源中未显示的数据,直到用户将鼠标悬停在某个元素上,我如何使用 javascript(请不要使用 jquery)以编程方式将鼠标悬停在它上面,直到我需要的数据变为可用然后被抓住?

如果之前有人问过这个问题,我深表歉意(但从拥有该网页的人的角度来看),但我一直在寻找解决方案,但找不到任何东西。

我尝试使用但失败的是:

function findBpDate(){  
    document.getElementById('tileDetails').children[1].children[0].children[1].children[0].fireEvent('onmouseover');    
    return document.getElementsByClassName('text elementText')[0].textContent;
}

当它回调我的应用程序时,它返回“未定义”,但我确定我指向的是正确的 DOM 元素。

这就是我希望 javascript “悬停”在的地方:

   <span class="a arrow disabled">Send troops</span>

一旦这个元素被“悬停”在上面,这个元素的文本就会变成我需要抓取的文本:

   <div class="text elementText">Beginners protection until 20/07/13 07:51 am.</div>

我已经在上面展示了当鼠标“悬停”在我需要它的元素上时元素的样子,但是根据我收集的内容,这会根据用户在玩游戏时悬停在哪个元素上而发生很大变化源代码保存游戏中每个工具提示的文本。

所以我需要一个将悬停在某个元素上的函数,然后在它悬停时,从工具提示文本/“text elementText”元素中获取文本。

【问题讨论】:

  • 为什么你的尝试失败了?您正在查看哪个页面,或提供某些上下文的来源。
  • 更新了原始问题:)
  • 如果您的 javascript 返回未定义,我很确定您没有指向正确的 DOM 元素。
  • @OP 是否可以通过其他方式引用 span 元素。喜欢
  • getElementByclass, getElementByTagName, getelementById

标签: javascript vb.net awesomium


【解决方案1】:

试试 WebView.InjectMouseMove(x, y)。

类似

    public Point GetElementPosition(dynamic element)
    {
        dynamic rect = element.getBoundingClientRect();
        using (rect)
        {
            return new Point(rect.left, rect.top);
        }
    }

    dynamic element = webView.ExecuteJavascriptWithResult("document.getElementById('id')");
    Point pos = GetElementPosition(element);
    webView.InjectMouseMove(pos.X, pos.Y);

【讨论】:

  • 干杯!这行得通,我不认为我真的能够做到这一点!
【解决方案2】:

使用 js/dom 可以轻松 10 倍。 http://jsfiddle.net/pA2Vd/

这样做...假设您可以通过 Id 以某种方式获取对元素的引用会容易得多。

var elm = document.getElementsByClassName('a arrow disabled')[0];
var txt = document.getElementsByClassName('text elementText')[0];
var evt = new Event('mouseover');
elm.dispatchEvent(evt);
var status = txt.innerText;

(helpfuL stuff down) 否则你需要捕获事件,检测谁触发了它,检查它是否有这个类和标签名称。大量处理。

var txt,spn,status='';
document.getElementByTagName('span').forEach(function(d){
    if (d.tagName=="div" && d.className == 'text elementText'){
    var txt = d;
    }    
}

window.onmouseover = function(e) {
    var elm = e.target;
    if (elm.tagName=="SPAN" && elm.className == 'a arrow disabled') {
       status=txt.innerText;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2011-06-02
    • 2011-11-08
    • 2015-11-18
    相关资源
    最近更新 更多