Javascript 你能在Selenium Webbroser中跟踪网页上的鼠标位置吗?C#

Javascript 你能在Selenium Webbroser中跟踪网页上的鼠标位置吗?C#,javascript,c#,selenium,google-chrome-extension,selenium-chromedriver,Javascript,C#,Selenium,Google Chrome Extension,Selenium Chromedriver,我试图在Selenium浏览器中跟踪鼠标坐标 Selenium没有鼠标跟踪功能。它只有MoveByOffset(intx,inty)和MoveToElement(IWebElement)功能。我需要设置自定义位置并使用MoveByOffset(int x,int y)功能移动到它们 Selenium允许使用JavaScript脚本,但似乎不允许在后台运行脚本并从所述后台函数检索值: 我们可以像这样运行: document.onmousemove = function(e) { var x

我试图在Selenium浏览器中跟踪鼠标坐标

Selenium没有鼠标跟踪功能。它只有
MoveByOffset(intx,inty)
MoveToElement(IWebElement)
功能。我需要设置自定义位置并使用
MoveByOffset(int x,int y)
功能移动到它们

Selenium允许使用JavaScript脚本,但似乎不允许在后台运行脚本并从所述后台函数检索值:

我们可以像这样运行:

document.onmousemove = function(e)
{
    var x = e.pageX;
    var y = e.pageY;
};
并从中返回值,但这似乎是不可能的(如上所述)

我们还可以创建一个Chrome扩展并将脚本放入它的
background.js
,但我找不到从扩展中检索值并在代码中使用它的方法。这可能吗

我也尝试过在C代码中跟踪鼠标的移动,但它似乎不可靠:

我们通常需要滚动页面。它可以通过以下操作完成:
js.ExecuteScript(“window.scrollBy(0,+scrollDownAmountInPixels+”)
,其中js是
IJavaScriptExecutor
。但滚动也会移动鼠标。我们可以将mouse-y值更新为滚动值,但是如果我们在页面顶部向上滚动,或者如果我们在页面底部向下滚动,鼠标将接收到错误的坐标。我们可以测试
页面高度
、窗口与页面顶部的距离(
滚动量
)以及窗口与页面底部的距离(
页面高度-(滚动量+窗口高度大小)
),但是JavaScript喜欢返回
0
,而不是在某些特定页面位置返回这些值。我试着按像素滚动以找到一个位置,在这个位置JavaScript不会返回所需值中的
0
,但它变得太不可靠了


我真的希望能在这里找到一些帮助。提前谢谢

所以我创建了这个类。它跟踪鼠标坐标,但有时可能会把它们弄乱一点(虽然有些固定,但仍然可以)

要使用它,您必须在加载新网页时调用
NewPage()
,但必须在网页完全加载后才能使用。然后可以使用
MoveTo()
,传递
x,y
坐标或
IWebElement
将光标移动到其位置。如果需要按
y
像素滚动页面,可以使用
Scroll()
。您可以使用
click()
单击

代码如下:

公共类鼠标悬停
{
public int PageHeight{get;private set;}
公共int页面滚动{get;private set;}
public int WindowHeight{get;private set;}
public int MouseXCurr{get;private set;}//当前鼠标x位置
public int MouseYCurr{get;private set;}//当前鼠标y位置
私有int移动{get;set;}
private int MouseYToMove{get;set;}
专用ChromeDriver Chr{get;set;}
私人行动点击;
公共鼠标移动器(ChromeDriver chr)
{
MouseXCurr=0;
MouseYCurr=0;
mousemove=0;
MouseYToMove=0;
Chr=Chr;
NewPage();
单击=新操作(chr);
click.click().Build();
}
public void NewPage()//每当输入一个新页面时调用此函数,并且该页面已完全加载到
{
IJavaScriptExecutor js=(IJavaScriptExecutor)Chr;
Int64.TryParse(js.ExecuteScript(“)+
var body=document.body+
“html=document.documentElement;”+
"" +
var height=Math.max(body.scrollHeight,body.offsetHeight+
html.clientHeight,html.scrollHeight,html.offsetHeight)+
“返回高度;”).ToString(),超出长ph);
页面高度=(int)ph;
如果(页面已滚动!=0)
{
MouseYCurr-=页面滚动;
}
页面滚动=0;
Int64.TryParse(js.ExecuteScript(“return window.innerHeight;”).ToString(),out long wh);
WindowHeight=(int)wh;
}
public void Click()//在当前鼠标位置单击
{
单击。执行();
}
public void Scroll(int y)//向下滚动y像素(负向上滚动)
{
IJavaScriptExecutor js=(IJavaScriptExecutor)Chr;
int oldcoll=页面滚动;
如果(y>0)
{
如果(页面滚动+窗口高度+y=-y)
{
js.ExecuteScript(“window.scrollBy(0,+y+)”);
页面滚动+=y;
//有时滚动高度会出错。这有助于解决问题,但并不总是解决问题
Int64.TryParse(js.ExecuteScript(“return(window.pageYOffset | | | | document.documentElement.scrollTop)-(document.documentElement.clientTop | | | 0);”).ToString(),超出长s;
如果(s!=0&&PageScrolled!=(int)s)
{
页面滚动=(int)s;
}
MouseYCurr+=页面滚动-旧滚动;
}
其他的
{
js.ExecuteScript(“window.scrollBy(0,+-PageScrolled+”);
页面滚动-=页面滚动;
//有时滚动高度会出错。这有助于解决问题,但并不总是解决问题