js判断页面是否加载完成?

本文深入探讨了三种常见的页面加载策略:window.onload、$(document).ready()及document.onreadystatechange,详细解释了它们的工作原理、触发时机及应用场景,帮助读者理解页面加载过程的不同阶段。

法一:window.onload:

当一个文档完全下载到浏览器中时,才会触发window.onload事件。这意味着页面上的全部元素对js而言都是可以操作的,也就是说页面上的所有元素加载完毕才会执行。这种情况对编写功能性代码非常有利,因为无需考虑加载的次序。


	window.onload=function(){
       dosth//你要做的事情
    }

法二: $(document).ready():

会在DOM完全就绪并可以使用时调用。虽然这也意味着所有元素对脚本而言都是可以访问的,但是,并不意味着所有关联的文件都已经下载完毕。换句话说,当HMTL下载完成并解析为DOM树之后,代码就会执行。

	$(document).ready(function(){
      dosth//你要做的事情
    })

注意:页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页 面包含图片等文件在内的所有元素都加载完成。(可以说:ready 在onload 前加载!!!)

法三:document.onreadystatechange

用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == “complete”判断是否加载完成,需要的朋友可以参考下,用document.onreadystatechange的方法来监听状态改变,
然后用document.readyState == “complete”判断是否加载完成

document.onreadystatechange = function()   //当页面加载状态改变的时候执行function
    { 
       if(document.readyState == "complete")
      {   //当页面加载状态为完全结束时进入 
                  init();   //你要做的操作。
         }
    }
在使用 Selenium 时,判断页面内容是否加载完成是一个常见需求,以下是几种判断方法: ### 使用 `document.readyState` `document.readyState` 是一个表示文档加载状态的属性,有三个可能的值:`loading`(文档正在加载)、`interactive`(文档已完成加载,DOM 已构建,但资源(如图片)可能仍在加载)和 `complete`(文档和所有资源都已加载完成)。可以通过执行 JavaScript 代码来检查这个属性的值: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') while True: ready_state = driver.execute_script("return document.readyState") if ready_state == "complete": break # 页面加载完成后进行操作 ``` ### 显式等待特定元素 使用 `WebDriverWait` 结合 `expected_conditions` 来等待特定元素的出现或可点击状态。这种方法适用于知道页面上某个关键元素何时加载完成就意味着页面可用的情况: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get('https://example.com') try: # 等待某个元素可点击 element = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, 'some-element-id')) ) # 元素加载完成后进行操作 except Exception as e: print(f"元素未找到: {e}") ``` ### 自动下滑页面辅助加载 对于一些通过滚动加载更多内容的页面,可以通过自动下滑页面的方式确保所有内容加载完成: ```python import time from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') distance = 300 interval = 0.2 current_scroll_position = 0 scrolls = int((driver.execute_script("return document.body.scrollHeight;") - current_scroll_position) / distance) for _ in range(scrolls): driver.execute_script(f"window.scrollBy(0, {distance});") time.sleep(interval) ``` ### 通过元素属性判断 如果某个元素的属性在加载前后会发生变化,可以通过这个元素来判断页面内容是否加载完成: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') while True: button_class = driver.find_element(By.XPATH, '//button').get_attribute('class') if 'loading' not in button_class: break # 页面加载完成后进行操作 ``` ### 使用 JavaScript 判断界面接口是否加载完成 可以编写 JavaScript 代码来判断界面接口是否加载完成: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') js = """ function loadScript(url,callback) { var script = document.createElement('script'); script.type = 'text/javascript'; if(script.readyState){// IE script.onreadystatechange = function () { if(script.readyState=='loaded' || script.readyState == 'complete'){ script.onreadystatechange = null; callback(); }; }; }else{ // 其他浏览器 script.onload = function () { callback(); }; }; script.src = url; document.getElementsByTagName('head')[0].appendChild(script); }; """ driver.execute_script(js) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gis_KG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值