Python Selenium Webdriver间歇性地无法将所有键发送到元素(无法定位元素)
我创建了一个黑手党机器人,通过论坛线程进行搜索,收集玩家投票信息,并在完成后发布信息(如果发出命令) 一切都很正常,只是有时候调用post()函数时,代码中的换行符没有显示出来,所以所有内容都集中在一行上 奇怪的是,当我手动调用post()函数时,我没有遇到这个问题,但是大约每运行70-100次,bot就会遇到这个问题并抛出这个错误: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
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,因为一些旧操作系统将其解释为不同的操作。酱汁:。以及关于差异的讨论: