使用selenium chromedriver在表格中查找锚标签

时间:2016-08-27 16:34:47

标签: python selenium selenium-chromedriver

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

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

然而,最近我发现并非每一集都在其链接文字中包含“剧集”一词。因此,我试图找出另一种方式来获得一集的每个链接。页面的基本结构包含一个表,每个链接都位于<td>元素内。

我想过收集所有的td元素,然后通过使用css选择器让他们的孩子(或者我应该说孩子)。然而,这不会起作用,因为有更多<td>元素而不是那些符合目标的元素。

以下是example page供参考。就硒而言,我是一个菜鸟,因此对它的api不是很熟悉,所以我不确切知道我在寻找什么。任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

尝试使//tr/td/a[starts-with(@href,'/Anime/')] 更具体:

python manage.py collectstatic

答案 1 :(得分:0)

你正走在正确的轨道上,但你可能会过度思考这一点。为什么不直接定位我们知道有剧集的表格,然后使用列表理解来获取所有剧集链接?

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..]