使用python在硒上在YouTube实时聊天上发送消息

时间:2019-03-07 13:40:25

标签: python html css selenium

我试图使用python和selenium编写脚本,以便在youtube实时流上发送垃圾邮件作为赠品,我能够成功完成大部分任务,直到第33行,直到我尝试定位youtube live chat box by( .find_element_by _... ?),它显示了各种错误,例如, AttributeError:“ WebDriver”对象没有属性找不到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 :(得分:0)

您可以像以前一样使用其xpath,而不是通过其文本查找元素。我只是看了YT直播的聊天框,而xpath似乎叫做//*[@id="input"]

编辑: 另外,在输入文本之前,您需要先单击元素,这可能会有些棘手。

答案 1 :(得分:0)

也不要将[@ id =“ input”]也用于其他元素。您不会获得该元素。使用类名{yt-live-chat-text-input-field-renderer style-scope}这是唯一的,您将通过该类名获得元素。 您发送的短信内容错误      driver.find_element_by_text('Say somthing ...')。send_keys('#PUBGMOBILE') 这不是文本框。

答案 2 :(得分:0)

基本上,div与'input'事件关联,因此一旦在div中输入值,就必须分派'input'事件。 这是我能够从控制台成功执行的代码(仅供参考,这是JS,您可以在测试和语言中使用相同的逻辑)。

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

第1行等于CSS中的findelemnt

第2行输入输入

元素上的第3行fireevent'input'

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

应该做魔术,因为我的机器上没有Eclipse Java环境,所以无法测试上面的代码。测试一下,让我们知道。

有关fireevent实现的更多信息,请参考Selenium FireEvent文档。