По-прежнему получаю StaleElementReferenceException во время зацикливания, даже если я refre sh ссылки - PullRequest
1 голос
/ 16 января 2020

Я пытаюсь создать бота для Quizlet для развлечения, но я столкнулся с этой проблемой для "Match". По сути, программа должна перетаскивать плитки на другие плитки, чтобы сопоставить их все и заставить их исчезнуть. Все элементы уже правильно упорядочены в html (поэтому мне просто нужно соответствовать индексам 0-1, 2-3, 4-5, 6-7 ... в списке). Каждый раз, когда он соответствует двум элементам, эти два исчезают из DOM, поэтому я предполагаю, что это проблема.

Вот мой текущий код:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.common import exceptions
import time

driver = webdriver.Firefox()
actionChains = ActionChains(driver)


def match():
    driver.find_element(By.LINK_TEXT, 'Match').click()
    driver.find_element(By.CLASS_NAME, 'UIButton.UIButton--hero').click()
    for _ in range(6):
        a = driver.find_elements(By.CLASS_NAME, 'MatchModeQuestionScatterTile')
        actionChains.drag_and_drop(a[0], a[1]).perform()


def main():
    driver.get('https://quizlet.com/397790434/random-flash-cards/')
    match()


if __name__ == '__main__':
    main()

Каждый раз, когда я l oop, Я снова нахожу все элементы, поэтому не понимаю, почему они устарели.

Я также пытался многократно повторять цикл перетаскивания, хотя он никогда не заканчивается:

def match():
    driver.find_element(By.LINK_TEXT, 'Match').click()
    driver.find_element(By.CLASS_NAME, 'UIButton.UIButton--hero').click()
    for i in range(6):
        a = driver.find_elements(By.CLASS_NAME, 'MatchModeQuestionScatterTile')
        while True:
            try:
                actionChains.drag_and_drop(a[2 * i], a[2 * i + 1]).perform()
                break
            except exceptions.StaleElementReferenceException:
                pass

Я застрял в течение долгого времени, поэтому любая помощь или идеи будут оценены. Спасибо!

Просто краткое обновление / удар: я также попытался переместить их по координатам, хотя это также не работало последовательно (зависание после 1-2 циклов). После проверки источника html я заметил, что класс добавляет новый атрибут для единиц перевода, хотя я не уверен, что это что-то меняет. Я также попытался удалить части списка, которые не будут присутствовать в html после сопоставления, хотя это тоже не помогло. Не уверен, что это что-то конкретное c о Quizlet, или я что-то упустил концептуально.

Сейчас у меня почти нет идей, поэтому любые идеи будут высоко оценены. Спасибо!

...