Skip to content

Instantly share code, notes, and snippets.

@aclisp
Created November 3, 2018 11:32
Show Gist options
  • Save aclisp/0c2965af80816bd332b7096a89908ef6 to your computer and use it in GitHub Desktop.
Save aclisp/0c2965af80816bd332b7096a89908ef6 to your computer and use it in GitHub Desktop.
Youtube Comment Bot using Selenium
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 expect
from selenium.webdriver.common.keys import Keys
import time
from random import randint
def delay(n):
time.sleep(randint(2, n))
driver = webdriver.Chrome()
driver.get("https://www.youtube.com")
print("enter " + driver.title)
delay(5)
# click SIGN IN button
item = driver.find_element_by_css_selector("ytd-masthead div#buttons ytd-button-renderer a")
item.click()
delay(5)
# login google account
driver.find_element_by_id("identifierId").send_keys("xxxx@gmail.com")
driver.find_element_by_id("identifierNext").click()
delay(5)
password_locator = (By.CSS_SELECTOR, 'div#password input[name="password"]')
WebDriverWait(driver, 10).until(
expect.presence_of_element_located(password_locator)
)
password = driver.find_element(*password_locator)
WebDriverWait(driver, 10).until(
expect.element_to_be_clickable(password_locator)
)
password.send_keys("password")
driver.find_element_by_id("passwordNext").click()
delay(5)
print("wait for login ...")
WebDriverWait(driver, 300).until(
expect.presence_of_element_located((By.CSS_SELECTOR, "ytd-masthead button#avatar-btn"))
)
print("login ok")
search = driver.find_element_by_css_selector("ytd-masthead form#search-form input#search")
search.click()
search.send_keys("hago")
search.submit()
delay(5)
item = driver.find_element_by_css_selector("ytd-search a#video-title")
item.click()
delay(5)
# scroll to the bottom in order to load the comments
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print("wait for comments to load ...")
WebDriverWait(driver, 10).until(
expect.presence_of_element_located((By.CSS_SELECTOR, "ytd-comments ytd-comment-simplebox-renderer"))
)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
item = driver.find_element_by_css_selector("ytd-comments ytd-comment-simplebox-renderer div#placeholder-area")
item.click()
item = driver.find_element_by_css_selector(("ytd-comments ytd-comment-simplebox-renderer "
"iron-autogrow-textarea #textarea"))
item.click()
item.send_keys("I like it!\n")
item.send_keys("This is the most amazing things ever seen.\n")
item.send_keys("Wanna see more~\n")
item.send_keys(Keys.CONTROL, Keys.ENTER)
@RahulLanjewar93
Copy link

It might be because the selector Hasn't rendered yet , try putting time.sleep() just before that line so that it waits for the selector to load.

@aclisp
Copy link
Author

aclisp commented May 26, 2020

The code worked one year ago. It may need tuning now, because the youtube comment page elements could be changed. However, I stopped using this Bot because Google can detect this behavior and block your account. Use it at your own risk.

@yashu1wwww
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment