我正在编写一个vb.net程序来自动化和管理在线游戏。我正在使用Awesomium webcontrols来显示和操作游戏页面。
有一点我需要抓取源中没有显示的数据,直到用户将鼠标悬停在某个元素上,我怎样才能使用javascript(请不要jquery)以编程方式将鼠标悬停在它上面,直到我需要的数据变为可用,然后抓住?
如果之前已经问过这个问题,我会道歉(但是从拥有该网页的人的角度来看,它已经有了问题),但我一直在寻找解决方案的时间,但却无法找到任何结果。
我尝试使用但失败的是:
function findBpDate(){
document.getElementById('tileDetails').children[1].children[0].children[1].children[0].fireEvent('onmouseover');
return document.getElementsByClassName('text elementText')[0].textContent;
}
当它回调我的应用程序时返回“undefined”,我确定我指的是正确的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 /“text elementText”元素中获取文本。
答案 0 :(得分:0)
尝试使用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);
答案 1 :(得分:0)
使用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;
}
}