Я пытаюсь создать бота для 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, или я что-то упустил концептуально.
Сейчас у меня почти нет идей, поэтому любые идеи будут высоко оценены. Спасибо!