Created
November 3, 2018 11:32
-
-
Save aclisp/0c2965af80816bd332b7096a89908ef6 to your computer and use it in GitHub Desktop.
Youtube Comment Bot using Selenium
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("[email protected]") | |
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) |
Error
wait for comments to load ...
Traceback (most recent call last):
File ".\selenium-youtube.py", line 66, in
item = driver.find_element_by_css_selector(("ytd-comments ytd-comment-simplebox-renderer"
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.
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.
Try these running one
https://github.com/yashu1wwww/500-Auto-Youtube-Comments-Using-Localhost
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Will thiss work on different platform as well