luciferchase
luciferchase

Reputation: 559

How to search and play a video on YouTube using Selenium in Python?

I want to search and play a video using Selenium in Python.
Here is the code:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.maximize_window()
driver.get(www.youtube.com)

wait = WebDriverWait(driver, 3)
presence = EC.presence_of_element_located
visible = EC.visibility_of_element_located

# Search for the video.
time.sleep(1)
wait.until(visible((By.NAME, "search_query")))
driver.find_element_by_name("search_query").click()
driver.find_element_by_name("search_query").send_keys(video)
driver.find_element_by_id("search-icon-legacy").click()

# Play the video.
wait.until(visible((By.ID, "video-title")))
driver.find_element_by_id("video-title").click()

But the problem is, it plays the first video on the home page before it completes searching.
Can you guys suggest how to play the video?

Upvotes: 6

Views: 15782

Answers (1)

David Silveiro
David Silveiro

Reputation: 1602

You could bypass the need of starting off at the homepage completely by appending the desired search query to the search_query parameter :)

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.maximize_window()

wait = WebDriverWait(driver, 3)
presence = EC.presence_of_element_located
visible = EC.visibility_of_element_located

# Navigate to url with video being appended to search_query
driver.get('https://www.youtube.com/results?search_query={}'.format(str(video)))

# play the video
wait.until(visible((By.ID, "video-title")))
driver.find_element(By.ID, "video-title").click()

Upvotes: 8

Related Questions