отправка сообщения в чат на YouTube с селеном с помощью python - PullRequest
0 голосов
/ 07 марта 2019

Я пытался сделать сценарий с использованием Python и Selen, чтобы спамить массаж в прямом эфире YouTube для бесплатных раздач, я смог успешно выполнить большую часть задачи до тех пор, пока на линии (33), где я пытался найти окно живого чата YouTube ( .find_element_by _... ?) показывало все виды ошибок, например, AttributeError: объект 'WebDriver' не имеет атрибута или не удалось locate element_by _...? 'find_element_by_text, xpath, id.class и т. д.

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

email = ''
password = ''
gmail_link = 'http:\\www.gmail.com'

driver = webdriver.Firefox('D:\Projects\python projects')
driver.get(gmail_link)
time.sleep(4)

#email send_keys
driver.find_element_by_id('identifierId').send_keys(email)

#Email_next button xpath.click
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[2]   /div/div/div[2]/div/div[2]/div/div[1]/div/content/span').click()
time.sleep(4)

#password xpath
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[2]/div/div/div[2]/div/div[1]/div/form/content/section/div/content/div[1]/div[1]/div/div/div/div/div[1]/div/div[1]/input').send_keys(password)
time.sleep(2)
#password button xpath.click
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/div[2] /div/div/div[2]/div/div[2]/div/div[1]/div/content/span').click()

time.sleep(5)


#A random youtube live link
driver.get('https://www.youtube.com/watch?v=VTqTnbe6b1g')
time.sleep(5)
# youtube live chat box
driver.find_element_by_text('Say somthing...').send_keys('#PUBGMOBILE')
time.sleep(3)
# youtube live chat box button
driver.find_element_by_id('//*[@id="button"]').click()

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

не используйте [@ id = "input"], это также было дано для другого элемента.Вы не получите элемент.Используйте имя класса {yt-live-chat-text-input-field-renderer style-scope}, это уникально, вы получите элемент по этому имени класса.Вы отправляете текст в неправильный элемент driver.find_element_by_text ('Say somthing ...'). Send_keys ('# PUBGMOBILE') Это ярлык, а не текстовое поле.

0 голосов
/ 07 марта 2019

По сути, это div связано с событием 'input', поэтому вы должны отправить событие 'input', как только вы введете значение в DIV.Вот код, который мне удалось успешно выполнить из консоли (к вашему сведению, это JS, вы можете использовать ту же логику в своем тесте и языке).

ele = document.querySelector('div#input')
ele.textContent = 'test this sample data'
ele.dispatchEvent(new Event('input',{'bubles':true, 'cancelable':true}))

Строка 1 равна findelemnt css

Строка 2 введите вход

Строка 3 fireevent 'input' для элемента

WebElement chatEle = driver.find_element(By.CSS_SELECTOR('div#input')
chatEle.sendKeys "sample data"
driver.fireEvent(chatEle,"input")

должен сделать чудо, не смог протестировать код выше, так как у меня нет затмения Java-среды на моей машине.Протестируйте его и дайте нам знать.

См. Документ Selenium FireEvent для получения дополнительной информации о реализации fireevent.

0 голосов
/ 07 марта 2019

Вместо того, чтобы искать элемент по его тексту, вы можете использовать его xpath, как вы делали раньше. Я только что посмотрел на окно чата для прямой трансляции YT, и xpath, кажется, называется //*[@id="input"]

Edit: Также может быть что-то хитрое, когда вам нужно сначала нажать на элемент, прежде чем вы сможете ввести текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...