如何使用 selenium webdriver 从 Quizlet 教科书页面获取练习链接?

问题描述 投票:0回答:1

考虑一下,例如:

https://quizlet.com/explanations/textbook-solutions/linear-algebra-done-right-3rd-edition-9783319110790

我的第一个想法是单击每个章节的内容来展开并显示练习。这是我想到的:

driver.get("https://quizlet.com/explanations/textbook-solutions/linear-algebra-done-right-3rd-edition-9783319110790")
urls = []

for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.c1tlcqh7 > div.cnuw08l > button"))):
    element.click()

for element in WebDriverWait(driver, 60).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.e1tk5ihi > span > a"))):
    urls.append(element.get_attribute("href"))

但是每一章都有多个部分。 我的程序只能获取每章第一部分的练习链接。要获取所有练习的链接,我还需要单击其他部分的内容,但我无法制定出一个系统来执行此操作。

python selenium-webdriver selenium-chromedriver ui-automation
1个回答
0
投票

我想出了一些有用的东西,但它非常草率:

driver.get("https://quizlet.com/explanations/textbook-solutions/linear-algebra-done-right-3rd-edition-9783319110790")
urls = dict() # i'm basically using the dict keys as an ordered set
cards = []

for element in WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.c1tlcqh7 > div.cnuw08l > button"))):
    element.click() # expand the thing

    for eli in WebDriverWait(driver, 60).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.e1tk5ihi > span > a"))):
        urls[eli.get_attribute("href")] = "" # add the urls
    
    for ele in WebDriverWait(driver, 60).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "button.TextbookTableOfContentsList--link.i73vo82"))): # do the same thing for other sections too
        ele.click()

        for elo in WebDriverWait(driver, 60).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "div.e1tk5ihi > span > a"))):
            urls[elo.get_attribute("href")] = ""
    
    element.click() # unexpand the thing

urls = urls.keys()

© www.soinside.com 2019 - 2024. All rights reserved.