我正在尝试驱动类似于Google地图的网络地图的一部分,其中放大/缩小是通过在鼠标悬停时滚动来完成的.理想情况下,我希望能够做到这样的事情:
someElement.scroll(-50)
Run Code Online (Sandbox Code Playgroud)
我在文档中看到的最接近的方法是click和send_keys,但这些方法都没有滚动.我也尝试通过Javascript将卷轴发送到页面,例如,driver.execute_script("scroll(0,-50)")这似乎没有做任何事情.
我怎样才能做到这一点?
我的目标:
我正在尝试制作一个 python 机器人来赢得chrome 的恐龙游戏。
游戏允许两种类型的跳跃:
使用main_body.send_keys(Keys.SPACE)(如下面的代码所示)给出了短跳转。
我的问题:
我很难执行跳远。
我的做法:
目前,对于跳远,我正在使用该Keyboard库:
keyboard.press(keyboard.KEY_UP)
不幸的是,这要求浏览器窗口始终处于焦点。稍后,我希望无头地运行这个程序,所以这种方法行不通。
或者:
我试过ActionChains:
ActionChains(driver) \
.key_down(Keys.SPACE) \
.pause(0.2) \
.key_up(Keys.SPACE) \
.perform()
Run Code Online (Sandbox Code Playgroud)
但这最终会滚动整个页面。并且没有达到预期的目的。
我只是希望直接将这些操作“发送”到画布元素,而不是在整个页面上执行它们...
我希望做这样的事情:
main_body.key_down(Keys.SPACE)
time.sleep(0.2)
main_body.key_up(Keys.SPACE)
Run Code Online (Sandbox Code Playgroud)
虽然这当然会给我这个错误:AttributeError: 'FirefoxWebElement' object has no attribute 'key_down'因为canvas没有属性key_down或key_up.
这是一个 MCVE:
注意: 在代码中,恐龙会不断跳跃,但这不是重点,这只是为了检查跳跃的高度而不是赢得比赛。
main_body.key_down(Keys.SPACE)
time.sleep(0.2)
main_body.key_up(Keys.SPACE)
Run Code Online (Sandbox Code Playgroud)
请给别人注释掉代码,看看每种跳转的效果。
如果可能的话,建议一些其他的替代方法,在不使用Keyboard和不滚动整个页面的情况下进行跳远......