我试图使用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()
答案 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文档。