使用 selenium chromedriver 在 table 中查找锚标签

Finding anchor tags within a table using selenium chromedriver

我正在尝试构建一个应用程序来自动执行下载多个动漫剧集的过程,但我被卡住了。到目前为止,我已经能够使用以下代码找到第 link 集:

def get_episodes(driver):
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//a[contains(@title,'Episode')]")))
    episodes = driver.find_elements_by_xpath("//a[contains(@title,'Episode')]")
    del episodes[-1]
    episodes = list(reversed(episodes))
    return episodes

但是最近我发现并不是每一集的 link 文本中都包含 'episode' 这个词。因此,我正在尝试找出另一种方法让每个 link 都进入一集。页面的基本结构包含一个 table,每个 link 位于一个 <td> 元素内。

我想过收集所有的 td 元素,然后使用 css 选择器得到它们的 children(或者我应该说 child)。不过,这也行不通,因为 <td> 个元素比看到的要多。

这里有一个example page供参考。就 selenium 而言,我是一个新手,因此对其 api 不是很熟悉,所以我不知道我到底在寻找什么。任何建议表示赞赏。

尝试使您的 XPath 更具体:

//tr/td/a[starts-with(@href,'/Anime/')]

你的方向是对的,但你可能想多了。为什么不只定位我们知道有剧集的 table,然后使用列表理解来获取所有剧集链接?

def get_episodes():
    episode_table = driver.find_element_by_class_name('listing')
    episode_links = [i.get_attribute('href') for i in episode_table.find_elements_by_tag_name('a')]
    print(episode_links)

    >>>['http://kissanime.to/Anime/Death-Note-Dub/Episode-037?id=97557', 'http://kissanime.to/Anime/Death-Note-Dub/Episode-036?id=97556', 'http://kissanime.to/Anime/Death-Note-Dub/Episode-035?id=97555', 'http://kissanime.to/Anime/Death-Note-Dub/Episode-034?id=97554',etc..]