Selenium + Headless Chrome,提交凭据后YouTube无法连接到帐户

时间:2019-01-12 19:53:45

标签: python selenium chrome-web-driver

出于教育目的,我决定在YouTube上构建一些自动化脚本(由于涉及某些频道切换,因此无法通过API实现)。

我正在使用Selenium和Headless Chrome。 将所有内容都设置为headless-false时,我的脚本可以正常工作,但这是因为我能够导入user-data-dir,这使我避免了登录过程中遇到的登录循环。

因此,当我不导入数据时,我开始监视headless-false的情况,并且似乎出于某种原因它都不希望登录。

问题不在于我无法在登录名和密码字段中输入我的凭据,而是在YouTube中发送凭据后无法登录。

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


options = webdriver.ChromeOptions()
#options.add_argument("user-data-dir=Admin$ /Users/Admin/Library/Application\ Support/Google/Chrome/Profile\ 30")
options.add_argument("window-size=1440,900")
options.add_argument('headless-false')

# launching the driver
driver = webdriver.Chrome(chrome_options=options)

# entering credentials
driver.get('https://www.youtube.com/')
time.sleep(1)
driver.find_element_by_xpath('//div[2]/ytd-button-renderer/a/paper-button/yt-formatted-string').click()

time.sleep(1)
email = driver.find_element_by_css_selector('input[type=email]')
email.send_keys('myemail@gmail.com')
print("Email entered")

driver.find_element_by_id("identifierNext").click()
time.sleep(1)

password = driver.find_element_by_css_selector('input[type=password]')
password.send_keys('mypassword')
print("Password entered")
driver.find_element_by_id("passwordNext").send_keys(Keys.ENTER)
print("Logged in!")

由于某种原因,登录后再次返回YouTube时,该频道仍未登录。我尝试了许多不同的方式,例如尝试通过youtube移动网站,首先登录gmail然后访问YouTube,但是没有什么可以做的。

我也知道使用sleep ()并不是执行这些操作的好方法,我可以使用一些implicit wait,但我想先对主要问题进行修正,然后再进行整体调整东西。

1 个答案:

答案 0 :(得分:0)

我认为它将无法正常工作,因为youtube认为登录过程是通过无头浏览器/硒网络驱动程序完成的,并拒绝了它。 www.google.com也有同样的问题(请参见https://gist.github.com/ikegami-yukino/51b247080976cb41fe93