Как прокомментировать живое видео на YouTube с помощью Selenium через Python - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь прокомментировать живое видео на YouTube.

Но я получаю ошибку

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@id='label']"}

Вот мой код.

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 EC

chrome_path = r"xxxx"
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_path,chrome_options=chrome_options)

driver.get('https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fhl%3Den%26feature%3Dcomment%26app%3Ddesktop%26next%3D%252Fall_comments%253Fv%253D-N4ztwGnw90%26action_handle_signin%3Dtrue&uilel=3&service=youtube&passive=true&hl=en')

driver.implicitly_wait(10)

# post a comment
comment = "test"

driver.find_element_by_xpath("//input[@id='label']").send_key('Hello')
driver.find_element_by_xpath("//button[@class='style-scope yt-button-renderer' and @id='button']").click()

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Попробовал приведенный ниже код, но выдал ошибку.

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 EC
from selenium.webdriver.common.keys import Keys
import unittest 
from selenium.common.exceptions import TimeoutException



chrome_path = r"xxxx"
chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_path,chrome_options=chrome_options)
driver.get('https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fhl%3Den%26feature%3Dcomment%26app%3Ddesktop%26next%3D%252Fall_comments%253Fv%253D6-S4et2YpZc%26action_handle_signin%3Dtrue&uilel=3&service=youtube&passive=true&hl=en')

# post a comment
comment = "test"

boxFind =  WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//label[@class='style-scope yt-live-chat-text-input-field-renderer']"))).send_keys("Novask")

Ошибка

  File "C:\Python3\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
0 голосов
/ 05 июня 2019

Чтобы отправить последовательность символов внутри нужного элемента, вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любое из следующих решений:

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div#input.style-scope.yt-live-chat-text-input-field-renderer.style-scope.yt-live-chat-text-input-field-renderer"))).send_keys("Novask")
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='style-scope yt-live-chat-text-input-field-renderer style-scope yt-live-chat-text-input-field-renderer' and @id='input']"))).send_keys("Novask")
    
  • Примечание : необходимо добавить следующие операции импорта:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
...