考虑一下,例如:
我的第一个想法是单击每个章节的内容来展开并显示练习。这是我想到的:
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"))
但是每一章都有多个部分。 我的程序只能获取每章第一部分的练习链接。要获取所有练习的链接,我还需要单击其他部分的内容,但我无法制定出一个系统来执行此操作。
我想出了一些有用的东西,但它非常草率:
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()