Selenium WebDriver:无需API在YouTube标记/删除垃圾评论
解决YouTube评论三点菜单需悬停才显示的问题
要触发评论的三点更多菜单,核心是模拟鼠标悬停到评论区域,让隐藏的菜单按钮显示出来,再执行点击操作。以下是修改后的代码及关键步骤:
关键修改点
- 使用
ActionChains模拟鼠标悬停,触发菜单显示 - 调整元素定位逻辑,确保先定位评论容器,再找到对应的三点按钮
- 增加等待逻辑,确保元素加载完成后再操作
修改后的完整代码
from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import pathlib URL = "https://www.youtube.com/watch?v=dvecqwfU6xw&lc=Ugxw_nsUNUor9AUEBGp4AaABAg.9fDfvkgiqtW9fDkE2r6Blm" options = webdriver.ChromeOptions() user = pathlib.Path().home() options.add_argument(f"user-data-dir={user}/AppData/Local/Google/Chrome/User Data/") driver = webdriver.Chrome('chromedriver.exe', options=options) driver.get(URL) wait = WebDriverWait(driver, 100) # 先滚动加载评论区域 while True: driver.execute_script("window.scrollBy(0, 200);") try: # 等待评论区域加载完成 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#comments"))) break except: pass # 定位第一条评论的容器(如果要处理多条,需要遍历所有评论容器) comment_container = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#contents ytd-comment-thread-renderer"))) # 模拟鼠标悬停到评论容器上,触发三点菜单显示 ActionChains(driver).move_to_element(comment_container).perform() # 等待三点菜单按钮出现并可点击 three_dot_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#more-button"))) three_dot_button.click() # 后续可以定位举报选项,比如: # report_option = wait.until(EC.element_to_be_clickable((By.XPATH, "//yt-formatted-string[text()='举报']"))) # report_option.click()
注意事项
- 如果要处理多条评论,需要遍历所有
ytd-comment-thread-renderer元素,对每个元素重复悬停+点击操作 - YouTube的页面元素可能会更新,若定位失败,需要用浏览器开发者工具重新获取最新的CSS选择器或XPATH
- 操作时不要过快,避免触发YouTube的反爬机制,可适当增加
time.sleep()或使用显式等待
内容的提问来源于stack exchange,提问作者Nakel
相关产品推荐
相关产品推荐

