要重现/测试鼠标滚轮,您必须通过脚本注入将
mouseover,
mousemove和
wheel事件发送到顶部元素。
这是Google Map的工作示例:
from selenium import webdriverfrom selenium.common.exceptions import WebDriverExceptiondef wheel_element(element, deltaY = 120, offsetX = 0, offsetY = 0): error = element._parent.execute_script(""" var element = arguments[0]; var deltaY = arguments[1]; var box = element.getBoundingClientRect(); var clientX = box.left + (arguments[2] || box.width / 2); var clientY = box.top + (arguments[3] || box.height / 2); var target = element.ownerdocument.elementFromPoint(clientX, clientY); for (var e = target; e; e = e.parentElement) { if (e === element) { target.dispatchEvent(new MouseEvent('mouseover', {view: window, bubbles: true, cancelable: true, clientX: clientX, clientY: clientY})); target.dispatchEvent(new MouseEvent('mousemove', {view: window, bubbles: true, cancelable: true, clientX: clientX, clientY: clientY})); target.dispatchEvent(new WheelEvent('wheel', {view: window, bubbles: true, cancelable: true, clientX: clientX, clientY: clientY, deltaY: deltaY})); return; } } return "Element is not interactable"; """, element, deltaY, offsetX, offsetY) if error: raise WebDriverException(error)options = webdriver.ChromeOptions()options.add_argument("--disable-infobars --disable-extensions --window-size=1366,768")driver = webdriver.Chrome(chrome_options=options)driver.get("https://www.google.co.uk/maps")# get elementelm = driver.find_element_by_css_selector("#scene > div.widget-scene > canvas")# zoom in with mouse wheelwheel_element(elm, -120)# zoom out with mouse wheelwheel_element(elm, 120)作为替代方案,您可以发送Google地图+/-的缩放比例:
# get elementelm = driver.find_element_by_css_selector("#scene > div.widget-scene > canvas")# zoom in with shortcutelm.send_keys("+")# zoom out with shortcutelm.send_keys("-")


