2017-11-13 5 views
1

私はズームイン/ズームアウトがマウスオーバーしている間にスクロールすることによって行われる、Googleマップに似たウェブマップの一部を動かそうとしています。理想的には、私はこのような何かをできるようにしたい:私はドキュメントで見たスクロールバーのない要素に、セレンのwebdriverが付いたマウスのスクロールホイール?

someElement.scroll(-50) 

最も近い方法はclicksend_keysあったが、それらのどちらもスクロールします。また、Javascriptを介してページにスクロールを送信しようとしました。 driver.execute_script("scroll(0,-50)")これは何もしないようです。

どうすればいいですか?

+0

を、あなたのコードのトライアルを表示することができますし、関連するHTML? – DebanjanB

答えて

1

マウスホイールを再現/テストするには、スクリプトインジェクションを使用して先頭の要素にmouseover,mousemovewheelというイベントを送信する必要があります。ここで

はGoogleマップを使用した作業例です:別の方法として

from selenium import webdriver 
from selenium.common.exceptions import WebDriverException 

def 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 element 
elm = driver.find_element_by_css_selector("#scene > div.widget-scene > canvas") 

# zoom in with mouse wheel 
wheel_element(elm, -120) 

# zoom out with mouse wheel 
wheel_element(elm, 120) 

は、Googleマップと+/-あるズームshortucts送ることができます:

# get element 
elm = driver.find_element_by_css_selector("#scene > div.widget-scene > canvas") 

# zoom in with shortcut 
elm.send_keys("+") 

# zoom out with shortcut 
elm.send_keys("-") 
+0

それはまさに私が探していたものです!親切にありがとう。 :) (確かに、私はcssセレクタを '' #scene> .canvas-container canvas "'に編集する必要がありましたが、それは大したことではありません) –

0

Googleマップにはズームイン/アウトボタンがあります。マウススクロールの代わりに使用することができます。

//うち

driver.find_element_by_id('widget-zoom-out').click() 
0

あなたはPyRobotクラス、あなたがしたいポイント上の第1焦点でそれを試すことができ、ズームをクリックし

driver.find_element_by_id('widget-zoom-in').click() 

//でズームをクリックしてくださいズームイン/アウトを実行し、PyRobotクラスを使用してキーボードのキーを使用してズームイン/アウト操作を実行します。

関連する問題