首页 > 解决方案 > 卡在谷歌身份验证的密码输入

问题描述

我正在制作一个应用程序,它会自动上传具有给定标题、描述和标签的 youtube 视频,然后我想使用谷歌身份验证器中使用的一组给定登录凭据进行网络抓取以登录 youtube。然而; 这是因为我无法通过密码输入屏幕

我试过把代码分成不同的函数,没有用。我试过把所有东西都放在一个函数里,没有用。我尝试制作一个专门访问特定 JSON 元素的函数,然后读取该元素并返回它,但也没有用。在实际网络抓取密码时,我尝试了许多不同的解决方案,但没有任何效果。

每次我运行我的程序并单击上传按钮(由 tkinter 框架/API/库提供(我不知道它是其中哪一个))时,都会出现此错误,我一直在尝试修复它几个小时. 但; 无济于事。

这是我在运行程序并单击上传按钮时遇到的错误

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\xxxxxxx\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/Users/xxxxxxx/PycharmProjects/YouTube Video Uploader/uploader.py", line 36, in make_ready_to_run
    login_to_youtube()
  File "C:/Users/xxxxxxx/PycharmProjects/YouTube Video Uploader/uploader.py", line 33, in login_to_youtube
    enter_password()
  File "C:/Users/xxxxxxx/PycharmProjects/YouTube Video Uploader/uploader.py", line 24, in enter_password
    python_button = browser.find_elements_by_class_name('whsOnd zHQkBf')[0]
IndexError: list index out of range

我已经研究了许多不同的方法来处理这个问题,比如使用 xpath、css 选择器和类名来尝试解决这个问题,但是每当我尝试修复它时它都不会消失。

这是程序的所有相关代码,以便您了解它以及它是如何运行的

browser = webdriver.Chrome()
browser.get("https://www.youtube.com")
window = tkinter.Tk()

def open_config_file(element_to_read_from):
    with open("config.json", "r") as read_file:
        data = json.load(read_file)
        for attrib in data['config']:
            return attrib[element_to_read_from]
        read_file.close()

def enter_email():
    python_button = browser.find_elements_by_xpath('//*[@id="identifierId"]')[0]
    python_button.send_keys(open_config_file('email'))
    python_button = browser.find_elements_by_xpath('//*[@id="identifierNext"]')[0]
    python_button.click()

def enter_password():
    python_button = browser.find_elements_by_class_name('whsOnd zHQkBf')[0]
    python_button.send_keys(open_config_file('password'))
    python_button = browser.find_elements_by_xpath('//*[@id="passwordNext"]')[0]
    python_button.click()

def login_to_youtube():
    python_button = browser.find_elements_by_xpath('//*[@id="buttons"]/ytd-button-renderer')[0]
    python_button.click()
    enter_email()
    enter_password()

def make_ready_to_run():
    login_to_youtube()

def close():
    window.quit()
    browser.quit()
    sys.exit()

def create_window():
    # added the desired buttons and text input fields
    window.title("YouTube Uploading Automated")
    tkinter.Label(window, text="Title").grid(row=0, column=0)
    tkinter.Label(window, text="Description").grid(row=1, column=0)
    tkinter.Label(window, text="Tags").grid(row=2, column=0)
    title_entry = tkinter.Entry(window).grid(row=0, column=1)
    description_entry = tkinter.Entry(window).grid(row=1, column=1)
    tags_entry = tkinter.Entry(window).grid(row=2, column=1)
    tkinter.Button(window, text="Upload", fg="green", command=make_ready_to_run).grid(row=3, column=0)
    tkinter.Button(window, text="Quit", fg="red", command=close).grid(row=3, column=1)
    window.mainloop()

def main():
    create_window()

错误发生在下面的这一行:

python_button = browser.find_elements_by_class_name('whsOnd zHQkBf')[0]

我希望程序单击密码输入字段,然后输入用户密码。病房后;它点击 YouTube 主屏幕上的上传视频按钮,让用户输入视频的文件路径,然后程序仍然控制用户的浏览器等,直到它完成自动化,然后自行关闭,但不是浏览器(因为视频正在上传,为了让您将视频的数据传输到 YouTube 的服务器,是通过互联网传输数据。关闭浏览器可能会阻碍,甚至完全停止此过程。)

同样,这是我在单击 tkinter 端的上传按钮时不断遇到的错误。

文件“C:/Users/xxxxxxx/PycharmProjects/YouTube Video Uploader/uploader.py”,第 24 行,在 enter_password python_button = browser.find_elements_by_class_name('whsOnd zHQkBf')[0] IndexError: list index out of range

标签: pythonpython-3.xselenium-webdrivertkinterpython-3.7

解决方案


推荐阅读