如何在selenium的多个剧集中找到剧集链接

2024-03-29 14:22:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用selenium python编写代码。 我像https://www.thewatchcartoononline.tv/anime/south-park-season-1一样在现场工作。正如您所看到的,本页面是本系列的页面,包含本系列所有插曲的链接。 我想获得给定情节的链接(用户选择哪一个)

重要的是要注意,并非每个系列页面都有相同的剧集命名格式,一些系列的链接文本中只有“第1集”,其他可能有“南方公园第一季第1集”的链接,所以我不能指望链接文本的命名格式

这是我用来获取该插曲链接的代码(episode_num由用户提供)

episode_num = 1
chrome_driver = Chrome()
chrome_driver.get("https://www.thewatchcartoononline.tv/anime/south-park-season-1")
# This xpath takes you to the div of the episode list and then it search for a link which has a certain text in it
links = chrome_driver.find_elements_by_xpath(
            f"//*[@id='sidebar_right3']//"
            f"a[contains(text(), 'Episode {episode_num}')]"
        )

然而,当我检查links时,我看到有不止一个链接。我得到了第1集和第10集(因为它们都包含字符串“第1集”) 有没有办法只获得我想要的链接?(可能是为了让selenium获取我想要的文本后没有任何数字的链接)


Tags: 代码https文本链接wwwdriverselenium页面
1条回答
网友
1楼 · 发布于 2024-03-29 14:22:51

尝试以下xpath。使用last()选项,这将给出计数1

links = chrome_driver.find_elements_by_xpath("(//*[@id='sidebar_right3']//a[contains(text(), 'Episode {episode_num}')])[last()]")
print(len(links))
网友
2楼 · 发布于 2024-03-29 14:22:51

编辑:

嗯,有点难看,但在Xpath 1.0中,我认为这是最好的选择

links = chrome_driver.find_elements_by_xpath(f"//*[@id='sidebar_right3']//a[(contains(., 'Episode {episode_num} ')) or (substring(text(), string-length(text()) - string-length('Episode {episode_num}') +1) = 'Episode {episode_num}') or (contains(., 'Episode {episode_num}-')) ]")

episode_num = 10查找第10-11集,但不为episode_num = 11查找第10-11集

检查:

  • Episode xtext()
  • text()Episode x结尾
  • Episode x-text()

我正在检查这些剧集的网址。依赖@href而不是text()不是更好的方法吗?这稍微短一点:

links = chrome_driver.find_elements_by_xpath(f"//*[@id='sidebar_right3']//a[(contains(@href, 'episode-{episode_num}-')) or (substring(@href, string-length(@href) - string-length('episode-{episode_num}') +1) = 'episode-{episode_num}')]")

检查:

  • episode-x-在url中吗
  • url以episode-x结尾

相关问题 更多 >