1

我正在尝试为 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()

每次循环时,我都会再次找到所有元素,所以我不明白为什么它们是陈旧的。

我也尝试反复循环拖放,尽管它​​永远不会结束:

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 中的列表部分,但这也无济于事。不确定这是否是关于 Quizlet 的特定内容,或者我是否在概念上遗漏了某些内容。

我现在几乎完全没有想法,所以任何想法都将不胜感激。谢谢!

4

0 回答 0