只有在DOM完全加载时,Selenium才会执行javascript

时间:2018-03-15 03:54:18

标签: python selenium selenium-webdriver

用户点击网址后,我正在尝试获取innerHeight,scrollHeight和scrollTop的新页面,

driver.switch_to_window(driver.window_handles[-1]) # switch to newest window after user click some link
WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'body')))

documentElement = driver.execute_script("return document.documentElement.scrollTop")
innerHeight = driver.execute_script("return window.innerHeight")
pageHeight = driver.execute_script("return document.body.scrollHeight")

但是,这些脚本返回错误的值,因为它在新页面完全加载之前执行。我怎样才能得到正确的值?

2 个答案:

答案 0 :(得分:1)

您可以使用JavaScript检查文档的就绪状态。

state = driver.execute_script('return document.readyState')
if state == 'complete':
    # the page is completely loaded

您可以创建自己的自定义预期条件来测试它。

class document_complete(object):   
    def __call__(self, driver):
        script = 'return document.readyState'
        try:
            return driver.execute_script(script) == 'complete'
        except WebDriverException:
            return False

并像任何其他EC一样使用它

WebDriverWait(driver, 20).until(document_complete())

答案 1 :(得分:0)

当您使用driver.execute_script时,您会在document.onloadwindow.onload之后返回您的innerHeight,scrollHeight和scrollTop。

driver.execute_script(document.onload = function(){return document.documentElement.scrollTop})
建议

window.onload

你也可以尝试

driver.execute_script(window.onload=document.documentElement.scrollTop)