如何解决将YouTube频道名称纳入评论
我想让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,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,random_comment())
if check_exists_by_xpath(driver,'//*[@id="contents"]/ytd-message-renderer'):
return comment_page(driver,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,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,random_comment())
解决方法
这里是获取频道名称的定位器:
// create empty container
val basket = scala.collection.mutable.Map[String,Set[String]]()
// loop over all numerical indexes for baskets (b<i>)
for (i <- 1 to 4) {
basket("b" + i.toString) = Set();
}
// loop over every row in df and store the items to the set
df.collect().foreach(row =>
basket(row(0).toString) += row(1).toString
)
您现在要做的就是获取文本并将其替换为字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。