Python Selenium Webdriver间歇性地无法将所有键发送到元素(无法定位元素)

Python Selenium Webdriver间歇性地无法将所有键发送到元素(无法定位元素),python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我创建了一个黑手党机器人,通过论坛线程进行搜索,收集玩家投票信息,并在完成后发布信息(如果发出命令) 一切都很正常,只是有时候调用post()函数时,代码中的换行符没有显示出来,所以所有内容都集中在一行上 奇怪的是,当我手动调用post()函数时,我没有遇到这个问题,但是大约每运行70-100次,bot就会遇到这个问题并抛出这个错误: File "C:\Users\Ironstove\AppData\Local\Programs\Python\Python36\lib\site-packag

我创建了一个黑手党机器人,通过论坛线程进行搜索,收集玩家投票信息,并在完成后发布信息(如果发出命令)

一切都很正常,只是有时候调用post()函数时,代码中的换行符没有显示出来,所以所有内容都集中在一行上

奇怪的是,当我手动调用post()函数时,我没有遇到这个问题,但是大约每运行70-100次,bot就会遇到这个问题并抛出这个错误:

  File "C:\Users\Ironstove\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 309, in find_element_by_xpath
    return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\Ironstove\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 787, in find_element
    'value': value})['value']
  File "C:\Users\Ironstove\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Ironstove\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea"}
  (Session info: chrome=59.0.3071.115)
  (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 6.1.7601 SP1 x86_64)
对于错误消息“无法定位元素”,我感到困惑的是,bot仍在发布消息,但缺少我的所有“\n”字符。由于web驱动程序仍在将键发送到文本框中,因此我不确定为什么会出现此错误,因此元素已被明确定位

以下是所讨论的功能:

def PostVotes():
    print("PostVotes: Posting the votes onto the forum...")

    driver.find_element_by_xpath("""//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea""").send_keys("Beep Boop, I'm a bot. Vote count was requested.\n")
    driver.find_element_by_xpath("""//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea""").send_keys("\n[b][SIZE=4]Lynch Votes:[/SIZE][/b]\n")
    for user in lynchref:
        if "PLAYERLIST" not in user and user != "":
            driver.find_element_by_xpath("""//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea""").send_keys("[b]",user,"[/b]", " - ", ['{}, '.format(elem) for elem in lynchref[user]], "\n")

    driver.find_element_by_xpath("""//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea""").send_keys("\n[b][SIZE=4]Not Voting:[/SIZE][/b]\n")
    for player in lynchref:
        if player not in lynches and "PLAYERLIST" not in player and player != "":
            driver.find_element_by_xpath("""//*[@id="cke_contents_vB_Editor_QR_editor"]/textarea""").send_keys(player,"\n")

    driver.find_element_by_xpath("""//*[@id="qr_submit"]""").click()
以下是该帖子在大多数情况下的外观:

以下是新词消失后的情况:

我刚刚在函数的开头添加了一个睡眠计时器,以防它是由于网站未完全加载所致,但我认为这不是问题所在(只是在黑暗中拍摄)。如果有人知道问题出在哪里,我会非常感激

编辑:
在进一步阅读和测试之后,我发现问题出在Chrome webdriver上,当处理大于100个字符的大文本块时,element.send_键似乎有这个问题。我解决这个问题的方法是将文本分块,到目前为止,一切都很顺利。我将继续运行它,希望不会看到任何进一步的问题。

我要做的第一件事是等待使用WebdriverWait的元素。(). 第二件事是,如果表单允许,我将发送key.RETURN而不是'\n'(即:不要做任何愚蠢的事情,比如按Enter键提交文本)。第三,我会尝试在按键之间添加等待。我发现chromedriver没有发送所有键(即使是12-14个字符的字符串)有问题,因为它发送键太快,浏览器/应用程序无法响应。只需将其拆分为单独的字母,并在它们之间进行小的等待即可发送。我可能会尝试一下单个字符的输出。好奇的是使用return和newline在性能上会有什么不同?理论上没有。PS:Keys.RETURN发送unicode字符E006,而Keys.ENTER发送E007。建议使用RETURN,因为一些旧操作系统将其解释为不同的操作。酱汁:。以及关于差异的讨论: