Селеновая цепочка действий повторяет движения мыши - PullRequest
1 голос
/ 27 февраля 2020

когда я передаю text = "one", он работает нормально в первый раз, но повторяет мои действия дважды во второй раз. Как я могу решить эту проблему?

Это мой код,

def err(wait, driver):
    text = ""
    print("Please say right to move element , say ok to place element.")
    wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="captcha-box"]/div/div[2]/div[1]/div[3]'))).click()
    element = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="body"]/div[6]/div[2]/div[1]/div/div[1]/div[2]/div[2]')))
    action= ActionChains(driver)
    action.click_and_hold(element)
    while text != "exit":

        r = sr.Recognizer()
        with sr.Microphone() as source:
            audio = r.listen(source)
            try:
                text = r.recognize_google(audio)
                print("You said : {}".format(text))

                if "one" in text:                           
                    action.move_by_offset(10, 0)
                    action.perform()
                elif "two" in text:                           
                    action.move_by_offset(20, 0)
                    action.perform()
                elif "back" in text:                           
                    action.move_by_offset(-10, 0)
                    action.perform()
                elif "ok" in text:
                    action.release(element)
                    action.perform()
                    break
                else:
                    print("Not a valid command (Error)")

            except:
                print("Sorry could not recognize what you said ( error page )")

Цепочка действий:

from selenium.webdriver.common.action_chains import ActionChains

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Это в некоторой степени исправило мою проблему

Я использовал location (int), чтобы запомнить предыдущее местоположение.

def err(wait, driver):
    text = ""
    print("Please say right to move element , say ok to place element.")
    wait.until(EC.element_to_be_clickable(
        (By.XPATH, '//*[@id="captcha-box"]/div/div[2]/div[1]/div[3]'))).click()
    element = wait.until(EC.element_to_be_clickable(
        (By.XPATH, '//*[@id="body"]/div[6]/div[2]/div[1]/div/div[1]/div[2]/div[2]')))
    location=10
    while text != "exit":

        action = ActionChains(driver)
        action.click_and_hold(element)

        r = sr.Recognizer()
        with sr.Microphone() as source:
            audio = r.listen(source)
            try:
                text = r.recognize_google(audio)
                print("You said : {}".format(text))

                if "one" in text:
                    action.move_by_offset(location, 0)
                    action.perform()
                    location=location+10

                elif "two" in text:
                    location=location+10
                    action.move_by_offset(location, 0)
                    action.perform()
                    location=location+20

                elif "tree" in text:
                    location=location+20
                    action.move_by_offset(location, 0)
                    action.perform()
                    location=location+30

                elif "back" in text:
                    action.move_by_offset(-10, 0)
                    action.perform()

                elif "ok" in text:
                    action.release(element)
                    action.perform()
                    break
                else:
                    print("Not a valid command (Error)")

            except:
                print("Sorry could not recognize what you said ( error page )")
        action.reset_actions()
1 голос
/ 27 февраля 2020

Проблема уже исправлена, действия не ясны после perform и повторите все ранее добавленные действия. На данный момент вам нужно инициализировать ActionChains внутри l oop и использовать reset_actions.

def err(wait, driver):
    text = ""
    print("Please say right to move element , say ok to place element.")
    wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="captcha-box"]/div/div[2]/div[1]/div[3]'))).click()
    element = wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="body"]/div[6]/div[2]/div[1]/div/div[1]/div[2]/div[2]')))
    while text != "exit":

        action= ActionChains(driver)
        action.click_and_hold(element)

        r = sr.Recognizer()
        with sr.Microphone() as source:
            audio = r.listen(source)
            try:
                text = r.recognize_google(audio)
                print("You said : {}".format(text))

                if "one" in text:                           
                    action.move_by_offset(10, 0)
                    action.perform()
                elif "two" in text:                           
                    action.move_by_offset(20, 0)
                    action.perform()
                elif "back" in text:                           
                    action.move_by_offset(-10, 0)
                    action.perform()
                elif "ok" in text:
                    action.release(element)
                    action.perform()
                    break
                else:
                    print("Not a valid command (Error)")

            except:
                print("Sorry could not recognize what you said ( error page )")

        action.reset_actions() #Fixed error
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...