Вот проблема:
До недавнего времени один из моих WebDriver
(ChromeDriver
) веб-ботов работал без сбоев в веб-игре, которая отображается в элементе HTML <canvas>
, но внезапно перестала работать,Я пытаюсь щелкнуть по элементу программно, но в API WebDriver или консоли браузера не сообщается об ошибке - он просто игнорируется.
Холст, с которым у меня возникла проблема, имеет такую структуру:
<canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()" height="640px" width="1120px"></canvas>
Метод очень прост, нажмите на элемент HTML с заданным (x, y) смещением:
Версия 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 (на языке Kotlin):
Actions(webDriver).moveToElement(element, offsetX, offsetY).click().perform()
И версии Javascript, и версия WebDriver в основном выполняют одно и то же действие, и обе они работают в обычных условиях для других моих ботов-холстов, нодля этого конкретного бота больше нет.
Когда я щелкаю мышью по холсту, щелчок срабатывает (анимация щелчка), но когда я делаю это программно, реакции не происходит.
Я нашел возможный ответ на эту ситуацию: разработчики могут проверить, является ли свойство события click isTrusted истинным. Это правда, если щелчок был выполнен человеком, и ложь, если он вызывается программно.
Вопрос : Есть ли у кого-нибудь еще возможные ответы, он оказался в такой ситуации или имелрешения / обходные пути?