【问题标题】:Python selenium handle windowsPython selenium 处理窗口
【发布时间】:2016-05-26 03:59:16
【问题描述】:

尝试为网站制作机器人,并与很多帐户聊天。

for x in range(0,2):
    project_dir = os.path.dirname(__file__)
    chromedriver_path = os.path.join(project_dir, 'chromedriver.exe')

    driver = webdriver.Chrome(chromedriver_path)
    driver.get("https://*********/login")

    user = driver.find_element_by_xpath("""//*[@id="username"]""")
    user.send_keys(username[x])

    passs = driver.find_element_by_xpath("""//*[@id="loginForm"]/div[2]/input""")
    passs.send_keys("***")

    time.sleep(3)
    driver.find_element_by_xpath("""//*[@id="loginForm"]/div[3]/button""").click()


    driver.get("https://***/channel")


x = driver.find_element_by_class_name("js-chat_input")
while True:
    enter = raw_input("Chat: ")
    for i in range(0, 2):
        g= driver.window_handles[i]
        x.send_keys(enter)
        driver.find_element_by_css_selector(".button.primary.float-right").click()

我想做它,这样它就会切换窗口,也可以输入我在聊天中输入的内容,如果你知道有更简单的方法,我很乐意尝试。

我的错误是

", line 32, in <module>
    g= driver.window_handles[i]
IndexError: list index out of range

【问题讨论】:

    标签: python python-2.7 python-3.x selenium


    【解决方案1】:

    试试这个,我已经更新了你正在使用的 for 循环。现在 for 循环将根据您的窗口数量进行迭代。

    x = driver.find_element_by_class_name("js-chat_input")
    while True:
        enter = raw_input("Chat: ")
        for i in range(0, len(driver.window_handles)):
            g= driver.window_handles[i]
            x.send_keys(enter)
            driver.find_element_by_css_selector(".button.primary.float-right").click()
    

    【讨论】:

    • 它消除了错误,但我的帐户只有一个正在输入
    • 他们都可以正常登录,但是当我尝试在聊天中输入内容时,只有我的一种类型
    • 是的,这是正确的,只有一个帐户会输入并发送聊天,我用两个帐户进行测试
    【解决方案2】:

    window_handles 在哪里,有多大。

    我会通过注释掉 while True 循环中的所有内容并打印 driver.window_handles 的长度来调试您的代码

    while True:
        #enter = raw_input("Chat: ")
        #for i in range(0, 2):
            #g= driver.window_handles[i]
            #x.send_keys(enter)
            #driver.find_element_by_css_selector(".button.primary.float-right").click()
    
        print(len(driver.window_handles))
    

    这将使您了解为什么在运行迭代时索引超出范围

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多