На YouTube я хочу найти определенные видео (например, видео на Python), и после этого я хочу вернуть все видео, которые возвращает этот поиск. Прямо сейчас, если я попробую, этот Python возвращает все видео на стартовой странице, а не на странице после поиска.
Текущий код:
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get("http://youtube.com")
driver.find_element_by_name("search_query").send_keys("Python")
driver.find_element_by_id("search-icon-legacy").click()
links = driver.find_elements_by_id("video-title")
for x in links:
print(x.get_attribute("href"))
Что здесь не так?
Ваш код выглядит нормально. В чем ошибка??
Он возвращается только после результатов поиска, верно? Что еще вы хотите вернуть, кроме этого? Я имею в виду, каков ваш вопрос на самом деле? Что ты хочешь делать?
Ребята, он четко упомянул требование, и ответы уже поступили. Пожалуйста, прочитайте вопрос еще раз.






Но для этого лучше использовать явное ожидание:
links = ui.WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "video-title")))
Надеюсь, это поможет вам!
Согласно обсуждению с @Mark:
Кажется, что элементы первой страницы Youtube все еще находятся в DOM...
Единственное исправление, которое я вижу, это перейти к URL-адресу поиска:
driver.get("http://youtube.com/results?search_query=Python")
# driver.find_element_by_name("search_query").send_keys("Python")
# driver.find_element_by_id("search-icon-legacy").click()
Вы должны использовать WebDriverWait не спать:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.chrome.options import Options
opt = Options()
opt.add_argument("--incognito")
driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=opt)
driver.get("http://youtube.com")
driver.find_element_by_name("search_query").send_keys("Python")
driver.find_element_by_id("search-icon-legacy").click()
WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.ID, "video-title")))
links = driver.find_elements_by_id("video-title")
for x in links:
print(x.get_attribute("href"))
Выход:
https://thewikihow.com/video_rfscVS0vtbw
https://thewikihow.com/video_f79MRyMsjrQ
https://thewikihow.com/video_kLZuut1fYzQ
https://thewikihow.com/video_N4mEzFDjqtA
https://thewikihow.com/video_Z1Yd7upQsXY
https://thewikihow.com/video_hnDU1G9hWqU
https://thewikihow.com/video_3cZsjOclmoM
https://thewikihow.com/video_f3EbDbm8XqY
https://thewikihow.com/video_2uCXIbkbDSE
https://thewikihow.com/video_HXV3zeQKqGY
https://thewikihow.com/video_JJmcL1N2KQs
https://thewikihow.com/video_qiSCMNBIP2g
https://thewikihow.com/video_7lmCu8wz8ro
https://thewikihow.com/video_25ovCm9jKfA
https://thewikihow.com/video_q6Mc_sAPZ2Y
https://thewikihow.com/video_yE9v9rt6ziw
https://thewikihow.com/video_Y8Tko2YC5hA
https://thewikihow.com/video_G0rQ7AEl5LA
https://thewikihow.com/video_CtbckFw0pJs
https://thewikihow.com/video_sugvnHA7ElY
Но первая ссылка в выводе — это не первое видео, которое вы получаете, когда ищете видео о питоне на YouTube..? это то, что я хочу
@MarkWekking, вы ищете URL-адрес объявления?
Нет, мне нужен список ссылок на видео, которые вы получаете при поиске Python на YouTube, теоретически первая ссылка должна быть: youtube.com/watch?v=rfscVS0vtbw. потому что когда вы ищете видео Python, это первое видео, которое оно возвращает (youtube.com/results?search_query=Питон)
@MarkWekking Я нашел проблему ... вам нужно добавить --incognito в chrome_options, я добавлю это в свой ответ ... :)
Это не решает проблему для меня .. Я по-прежнему получаю видео, которые находятся на главном экране YouTube, а не те, что после поискового запроса.
Давайте продолжить обсуждение в чате.
Чтобы вернуть все видео из поиска по ключевому слову питон, вам необходимо:
Вы можете использовать следующее решение
Блок кода:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://www.youtube.com/")
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#search"))).send_keys("Python")
driver.find_element_by_css_selector("button.style-scope.ytd-searchbox#search-icon-legacy").click()
print([my_href.get_attribute("href") for my_href in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "a.yt-simple-endpoint.style-scope.ytd-video-renderer#video-title")))])
Выход консоли:
['https://thewikihow.com/video_rfscVS0vtbw', 'https://thewikihow.com/video_7UeRnuGo-pg', 'https://thewikihow.com/video_3cZsjOclmoM', 'https://thewikihow.com/video_f79MRyMsjrQ', 'https://thewikihow.com/video_CtbckFw0pJs', 'https://thewikihow.com/video_Z1Yd7upQsXY', 'https://thewikihow.com/video_kLZuut1fYzQ', 'https://thewikihow.com/video_IZ0IM_T4aio', 'https://thewikihow.com/video_qiSCMNBIP2g', 'https://thewikihow.com/video_N0lxfilGfak', 'https://thewikihow.com/video_N4mEzFDjqtA', 'https://thewikihow.com/video_s3Ejdx6cIho', 'https://thewikihow.com/video_Y8Tko2YC5hA', 'https://thewikihow.com/video_c3FXQU3TyCU', 'https://thewikihow.com/video_yE9v9rt6ziw', 'https://thewikihow.com/video_yvHrNlAF0Y0', 'https://thewikihow.com/video_ZDa-Z5JzLYM']
какое отношение к этому имеет максимизация браузера?
в чем ошибка?