Python WebDriverException:Message:TypeError:can';不要接近死物

Python WebDriverException:Message:TypeError:can';不要接近死物,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,在一个相当复杂的python selenium测试脚本(无法从外部访问该脚本,因此我无法提供示例)中,我有一行代码等待元素变为可见: WebDriverWait(basedriver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"clb-iframe-workspace"))) elem = WebDriverWait(basedriver, 20).\ until(EC.element_to_be

在一个相当复杂的python selenium测试脚本(无法从外部访问该脚本,因此我无法提供示例)中,我有一行代码等待元素变为可见:

WebDriverWait(basedriver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"clb-iframe-workspace")))
elem = WebDriverWait(basedriver, 20).\
           until(EC.element_to_be_clickable((By.XPATH, '//div[contains(text(), "Feature extraction")]')))
在大多数情况下没有问题,web驱动程序会找到有问题的元素。但有时(大约10例中有1例)我会出现以下错误:

WebDriverException: Message: TypeError: can't access dead object
奇怪的是,这种事马上就发生了!Selenium甚至懒得用
WebDriverWait
来等待我希望Selenium等待的20秒

也许
iframe
开关与此有关? 我还试着在失败的一行之前做一个屏幕截图——在这两种情况下,我都得到一个空白的白色屏幕。那么我自己如何进一步调试这个呢?为什么
WebDriverWait
不等待

附录

  • 我已经实施了DebanjanB的建议,但我仍然得到了5%的相同误差
  • 如果我使用较慢的internet连接,错误几乎总是发生
  • 当我插入代码截图并写出页面源代码时(这需要一些时间),错误率再次降低
因此,我想说,这是一个明确的时间问题,再加上selenium中的一个bug

根据最佳实践,必须实现切换到
,并引入WebDriverwait with子句


类帧\u到\u可用\u和\u开关\u到\u它(对象)
class frame\u to\u be\u available\u和\u switch\u to\u it(object)
是检查给定帧是否可切换到的期望值。如果帧可用,它会将给定的驱动程序切换到指定帧


因此,您需要替换这些行:

elem = WebDriverWait(basedriver, 20).\
        until(EC.presence_of_element_located((By.ID, 'clb-iframe-workspace')))
basedriver.switch_to_frame(elem)
作为:

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

为什么不谷歌这个错误?有人说在之前添加
switch\u到\u default\u content()
会起作用。我需要在查找此元素之前切换到iframe,因此切换回默认内容是完全错误的!认领。有许多不同的情况。例如,您忘记从iframe切换回来。或者在访问元素之前重新加载iframe。基本上,你的内容不正确。但是为什么90%的时候它都有效,有时它不起作用呢?谢谢你的建议,我会试试。然而,我在哪里可以找到这样的“最佳实践”?或者你能推荐一本解释selenium和webdriver的所有内部细节的文章/书,以最详细的技术细节,这样我就可以了解和理解htlm dom、框架、驱动程序、geckodriver等的所有内容了?错误再次出现。你的建议无助于解决我的问题。但是如果您能提供一份非常好的深入详细的技术文档(例如,它非常详细地解释了每个可能的selenium/webdriver错误),我还是会非常感激的。好的,我解决了这个问题。帧在两者之间发生变化。正在加载新帧。我必须检查标题…@Alex正如你所问,我正在准备一份关于框架处理的详细技术文档
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC