【问题标题】:Finding anchor tags within a table using selenium chromedriver使用 selenium chromedriver 在表中查找锚标记
【发布时间】:2016-08-27 16:34:46
【问题描述】:

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

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

但是最近我发现并不是每一集的链接文本中都包含“episode”这个词。因此,我正试图找出另一种方法来获取剧集的每个链接。页面的基本结构包含一个表格,每个链接都位于一个<td> 元素内。

我曾想过收集所有 td 元素,然后使用 css 选择器获取它们的子元素(或者我应该说是子元素)。然而,这也行不通,因为<td> 元素比那些看起来要多。

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

【问题讨论】:

    标签: python selenium selenium-chromedriver


    【解决方案1】:

    尽量让您的XPath 更具体:

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

    【讨论】:

      【解决方案2】:

      您在正确的轨道上,但您可能有点过度思考。为什么不只定位我们知道有剧集的表,然后使用列表推导来获取所有剧集链接?

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

      【讨论】:

      • 太棒了!谢谢你的帮助:)
      猜你喜欢
      • 2012-06-02
      • 2019-05-25
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 2012-04-11
      • 2014-08-07
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多