本来はマウスの位置なんか気にしないで指定したelment.click()するだけでいいのだけど、
状況によっては要素がnot clickableだったりnot interactableでクリックできないときがある。
そんなときはActionChainsで無理やりクリックするのだけど、
そもそもマウスがいまどこをクリックしようとしてるのかが全く分からないため、まるで雲をつかむようなテストになってしまう。
そんなときに画面上にマウスカーソルを描画してくれる素晴らしいコードを発見したので、紹介。
元リンクはこちら
enable_cursor = """
function enableCursor() {
var seleniumFollowerImg = document.createElement("img");
seleniumFollowerImg.setAttribute('src', 'data:image/png;base64,'
+ 'iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAQAAACGG/bgAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA'
+ 'HsYAAB7GAZEt8iwAAAAHdElNRQfgAwgMIwdxU/i7AAABZklEQVQ4y43TsU4UURSH8W+XmYwkS2I0'
+ '9CRKpKGhsvIJjG9giQmliHFZlkUIGnEF7KTiCagpsYHWhoTQaiUUxLixYZb5KAAZZhbunu7O/PKf'
+ 'e+fcA+/pqwb4DuximEqXhT4iI8dMpBWEsWsuGYdpZFttiLSSgTvhZ1W/SvfO1CvYdV1kPghV68a3'
+ '0zzUWZH5pBqEui7dnqlFmLoq0gxC1XfGZdoLal2kea8ahLoqKXNAJQBT2yJzwUTVt0bS6ANqy1ga'
+ 'VCEq/oVTtjji4hQVhhnlYBH4WIJV9vlkXLm+10R8oJb79Jl1j9UdazJRGpkrmNkSF9SOz2T71s7M'
+ 'SIfD2lmmfjGSRz3hK8l4w1P+bah/HJLN0sys2JSMZQB+jKo6KSc8vLlLn5ikzF4268Wg2+pPOWW6'
+ 'ONcpr3PrXy9VfS473M/D7H+TLmrqsXtOGctvxvMv2oVNP+Av0uHbzbxyJaywyUjx8TlnPY2YxqkD'
+ 'dAAAAABJRU5ErkJggg==');
seleniumFollowerImg.setAttribute('id', 'selenium_mouse_follower');
seleniumFollowerImg.setAttribute('style', 'position: absolute; z-index: 99999999999; pointer-events: none; left:0; top:0');
document.body.appendChild(seleniumFollowerImg);
document.onmousemove = function (e) {
document.getElementById("selenium_mouse_follower").style.left = e.pageX + 'px';
document.getElementById("selenium_mouse_follower").style.top = e.pageY + 'px';
};
};
enableCursor();
"""
driver.execute_script(enable_cursor)
こいつを実行したうえでmove_to_element_with_offsetなりを実行すると、こんな感じでselenium上のマウスカーソルが表示される。
あとはx, y座標を微調整するだけ。あー助かった!
