这是问题所在:
直到最近,我的WebDriver
(ChromeDriver
)网络机器人之一在HTML <canvas>
元素内呈现的网络游戏上都可以正常工作,但突然停止了工作。我尝试以编程方式单击该元素,但WebDriver API或浏览器控制台中未报告任何错误-它将被忽略。
我遇到问题的画布具有以下结构:
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" height="640px" width="1120px"></canvas>
方法非常简单,单击具有给定(x,y)偏移量的HTML元素:
JavaScript版本:
function clickOnElem(elem,offsetX,offsetY) {
var rect = elem.getBoundingClientRect(), posX = rect.left,posY = rect.top; // get elems coordinates
// calculate position of click
if (typeof offsetX == 'number') posX += offsetX;
else if (offsetX == 'center') {
posX += rect.width / 2;
if (offsetY == null) posY += rect.height / 2;
}
if (typeof offsetY == 'number') posY += offsetY;
// create event-object with calculated position
var evt = new MouseEvent('click',{bubbles: true,clientX: posX,clientY: posY});
elem.dispatchEvent(evt); // trigger the event on elem
}
调用:
var el = document.getElementById("myElem");
clickOnElem(el,30,40);
Webdriver版本(科林语言):
actions(webDriver).moveToElement(element,offsetY).click().perform()
Javascript和WebDriver版本基本上都具有相同的作用,并且它们在我的其他canvas机器人的正常条件下都可以工作,但是对于这种特定的bot而言,它不再可用。
当我用鼠标在画布上单击时,会触发单击(单击动画),但是当我以编程方式进行操作时,则没有任何反应。
我发现了这种情况的可能答案,即开发人员可能会检查click事件的属性isTrusted是否为真。 如果单击是由人为操作,则为true;如果以编程方式调用,则为false。
问题:是否有人还有其他可能的答案,处于这种情况下或有任何解决方案/解决方法?