【问题标题】:Selenium right click sometimes double tapsSelenium 右键单击​​有时会双击
【发布时间】:2020-02-09 14:02:33
【问题描述】:

我正在为游戏扫雷游戏做一个机器人,我需要能够在其中右键单击图块以警告炸弹。我使用以下代码创建了一个用于单击图块的函数:

from selenium import webdriver
from selenium.webdriver import ActionChains

def click(rad, kol, bomb = False):
    if int(rad) > 0 and int(kol) > 0:
        tile = driver.find_element_by_xpath('//*[@id="{}_{}"]'.format(int(rad), int(kol)))

        if bomb == False:
            #Left click
            tile.click()
        else:
            #Right click
            actionChains.context_click(tile).perform()
            print("Right click")

但是当我使用以下代码调用函数时:

click(10, 10, True)
click(5, 5, True)
click(1,1,True)

坐标为 (10, 10) 和 (5,5) 的图块会打开和关闭,但之后只有 (10,10) 会再次打开。同时坐标为(1,1)的图块没有开关,但可以正常工作。

每次运行右键单击代码时我都会打印出来,并且我应该打印 3 次“右键单击”。

编辑:我发现问题可能是因为 actionChains 记得它是以前的操作,因此再次单击所有图块。但我不知道如何删除链的先前操作。 reset_actions() 函数似乎没有删除任何操作

【问题讨论】:

    标签: python selenium selenium-webdriver right-click


    【解决方案1】:

    我看到reset_actions 报告了一些错误 https://github.com/SeleniumHQ/selenium/issues/6837 但它已经关闭并且应该没问题(我的机器上也有这个问题)......要么尝试更新驱动程序,要么我猜如果它没有帮助,那么只需在if 语句中再分配一次actionChains。这是我目前想到的唯一快速解决方案。

    def click(rad, kol, bomb = False):
        if int(rad) > 0 and int(kol) > 0:
            tile = driver.find_element_by_xpath('//*[@id="{}_{}"]'.format(int(rad), int(kol)))
    
            if bomb == False:
                #Left click
                tile.click()
            else:
                #Right click
                actionChains = ActionChains(driver)
                actionChains.context_click(tile).perform()
                print("Right click")
    

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多