使用 python selenium 从 href 中检索值

Retriving value from href using python selenium

<a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/channel/UC8butISFwT-Wl7EV0hUK0BQ" dir="auto">freeCodeCamp.org</a>

我是 selenium 的新手,正在尝试制作一个 YouTube 排名检查机器人! 我试图从这里获取 href 值,以便我可以将它与频道名称进行比较并打印出正确的排名数字,但我得到的输出不正确。 我得到的输出是 2,5,而我应该得到 6,7。

谁能告诉我where/what我做错了吗?可以做些什么来解决这个问题?提前致谢

下面附上截图以查看排名

from selenium import webdriver
import time
channel_name = 'freeCodeCamp.org' #channel name
driver = webdriver.Chrome(r"C:\Users\user\PycharmProjects\YoutubeRankCheckBot\Drivers\chromedriver.exe")
driver.get("http://youtube.com")
driver.maximize_window()

search_bar = driver.find_element_by_id("search")
search_bar.send_keys("React JS") #Inserting text input in a automation way
search_button = driver.find_element_by_id("search-icon-legacy")
search_button.click()

time.sleep(5)


video_list = driver.find_elements_by_xpath('//a[contains(@href,"/channel/UC8butISFwT-Wl7EV0hUK0BQ")]')
print(video_list)

for index, channel in enumerate(video_list):
    if channel.text  == channel_name:
        print(index)

您使用了错误的定位器。
试试这个:

video_list = driver.find_elements_by_xpath("//div[@id='channel-info']//a[@class='yt-simple-endpoint style-scope yt-formatted-string']")

UPD
经过你的解释,我明白了一些。
您可以通过以下方式找到这些特定元素:

//div[@id='channel-info']//a[@class='yt-simple-endpoint style-scope yt-formatted-string' and (contains(@href,"/channel/UC8butISFwT-Wl7EV0hUK0BQ"))]

这将为您提供 2 个元素,因为该搜索结果中有来自该频道的 2 个视频

 video_list = driver.find_elements_by_xpath('//a[@class="style-scope ytd-video-renderer"]')
video_url = [video_list.get_attribute('href').replace('https://www.youtube.com', '') for video_list in video_list]
print(video_url)

for index, channel in enumerate(video_url):
    if channel == channel_id:
        print(index)

此处channel_id只不过是频道名称freeCodeCamp.org/channel/UC8butISFwT-Wl7EV0hUK0BQ

  1. 第一行给出a标签的所有元素
  2. 从第 1 步的列表中,找到 href 元素。它会给你完整的 URL 例如https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ。所以替换 https://www.youtube.com 并提取到 video_url
  3. 枚举 video_url 并打印 index