【问题标题】:Getting youtube channel name into comment将 youtube 频道名称添加到评论中
【发布时间】:2020-12-19 22:42:20
【问题描述】:

我想让 selenium 脚本评论带有特定关键字的视频。 但是我也想让它说出频道名称,如果可能的话,有人可以帮我吗?谢谢。

(我知道 {} 不应该在那里,但它会让您知道将频道名称放在哪里)

(频道名称将在 {}s btw 之间)

这里是代码。

import time
import os
from bs4 import BeautifulSoup
from selenium import webdriver

def youtube_login(email,password):

    op = webdriver.ChromeOptions()
    op.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
    #op.add_argument('--headless')
    op.add_argument('--disable-dev-shm-usage')
    op.add_argument('--no-sandbox')
    driver = webdriver.Chrome()
    driver.get('https://accounts.google.com/ServiceLogin?hl=en&continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fhl%3Den%26feature%3Dsign_in_button%26app%3Ddesktop%26action_handle_signin%3Dtrue%26next%3D%252F&uilel=3&passive=true&service=youtube#identifier')

    driver.find_element_by_id('identifierId').send_keys(email)
    driver.find_element_by_id('identifierNext').click()
    time.sleep(3)
    #WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div#password input[name="password"]')))
    driver.find_element_by_css_selector('div#password input[name="password"]').send_keys(password)
    time.sleep(4)
    driver.find_element_by_id('passwordNext').click()

    return driver

def comment_page(driver,urls,comment):

    if len( urls ) == 0:
        print ('Youtube Comment Bot: Finished!')
        return []
    
    url = urls.pop()
    
    driver.get(url)
    print(url)
    driver.implicitly_wait(1)

    if not check_exists_by_xpath(driver,'//*[@id="movie_player"]'):
        return comment_page(driver, urls, random_comment())
    time.sleep(4)
    driver.execute_script("window.scrollTo(0, 600);")
    
    if not check_exists_by_xpath(driver,'//*[@id="simple-box"]/ytd-comment-simplebox-renderer'):
        return comment_page(driver, urls, random_comment())

    if check_exists_by_xpath(driver,'//*[@id="contents"]/ytd-message-renderer'):
        return comment_page(driver, urls, random_comment())

    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "ytd-comments ytd-comment-simplebox-renderer")))

    driver.find_element_by_css_selector("ytd-comments ytd-comment-simplebox-renderer div#placeholder-area").click()
    driver.implicitly_wait(5)
    driver.find_element_by_xpath('//*[@id="contenteditable-root"]').send_keys(comment)
    driver.find_element_by_xpath('//*[@id="contenteditable-root"]').send_keys(Keys.CONTROL, Keys.ENTER)

    post = WebDriverWait(driver, 15).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR,'ytd-comments ytd-comment-simplebox-renderer'))
    )
    post.click()

    r = np.random.randint(2,5)
    time.sleep(r)

    return comment_page(driver, urls, random_comment())


def random_comment():
# You can edit these lines=======
    messages = [
        'sup {channel name here}, I loved this video lol cant wait to see more :D'
    ]
# ===============================
    r = np.random.randint(0, len(messages))

    return messages[r]
 
def check_exists_by_xpath(driver,xpath):
    
    try:
        driver.find_element_by_xpath(xpath)
    except NoSuchElementException:
        return False

    return True

if __name__ == '__main__':
# You should edit these lines=======
    email = 'Youremail@gmail.com'
    password = 'Yourpassword'
# ==================================

    urls = [
      'https://www.youtube.com/watch?v=Szww2_VqEKs&t',
    ]
    
    inp = open("url.txt","r")
    for line in inp.readlines():
            urls.append(line)
    

    driver = youtube_login(email, password)

    comment_page(driver,urls,random_comment())

【问题讨论】:

  • 所以在发布的网址上,您希望它打印 Ready Dev?
  • @arundeepchohan ,不完全是。我只想让它从 txt 文档中的关键字转到视频,并与频道的用户名一起评论。是的,这是来自 Ready Dev,但我想知道是否可以进行更改以完成此任务
  • driver.find_element_by_xpath("//*[@id='text']/a").text 应该可以得到那个文本。
  • 嗯,是的,您可以抓取该数据并将其存储到变量中并在 random_comment() 中打印出来。

标签: python selenium selenium-webdriver youtube


【解决方案1】:

这里是获取频道名称的定位器:

//div[contains(@class, 'channel-name')]//a

您现在要做的就是获取文本并将其替换为您的字符串。

【讨论】:

  • 我会把它放在哪里?
  • 当您在视频页面上时,您需要从此定位器获取文本。然后,您需要将其作为变量传递给您的 random_comment() 并用废弃的字符串替换您的字符串。
猜你喜欢
  • 2013-01-16
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
  • 2012-11-07
  • 2011-12-28
  • 2014-10-13
  • 2018-01-26
  • 1970-01-01
相关资源
最近更新 更多