出于教育目的,我决定在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
,但我想先对主要问题进行修正,然后再进行整体调整东西。
答案 0 :(得分:0)
我认为它将无法正常工作,因为youtube认为登录过程是通过无头浏览器/硒网络驱动程序完成的,并拒绝了它。 www.google.com也有同样的问题(请参见https://gist.github.com/ikegami-yukino/51b247080976cb41fe93)