我想了解Findelement的工作原理。
案例1:一旦在DOM中找到它(在页面加载和在浏览器中呈现之前/期间),它是否会对元素起作用
案例2 或者,它仅在页面完全加载时才起作用&渲染?
案例3:或者,它是否在DOM中找到了元素(参见案例1)并且只是等待页面呈现以便它现在可以对元素起作用?
答案 0 :(得分:0)
FindElement根据程序中定义的隐式和显式等待继续查找元素。它不会等到整个DOM加载完毕。
如果您想等到页面加载完成,请使用pageLoadTimeout:
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
这里10代表10秒,直到抛出TimeoutException。
答案 1 :(得分:0)
onLoad
事件)之前
执行任何命令(例如get
或
find_element_by_css_selector
)。 from selenium import webdriver
profile = webdriver.FirefoxProfile()
profile.set_preference('webdriver.load.strategy', 'unstable')
driver = webdriver.Firefox(profile)
使用driver.set_page_load_timeout
,您可以更改Selenium在加载页面之前应等待的时间。如果在此时间段TimeoutException: Message: Timed out waiting for page load.
被抛出后未加载页面。
隐式和显式等待可以改变" "找到元素"的行为功能:
阅读:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits
其中一个要点:WARNING: Do not mix implicit and explicit waits. Doing so can cause unpredictable wait times.
这意味着在使用显式等待之前,如果您已经设置了隐式等待全局' - 首先你需要做的是禁用隐式等待。
长话短说:
默认情况下"找到元素"功能/ Selenium等到页面加载并尝试查找元素。