日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)

發布時間:2024/9/15 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引言:

當你覺得你的定位沒有問題,但是卻直接報了元素不可見,那你就可以考慮是不是因為程序運行太快或者頁面加載太慢造成了元素不可見,那就必須要加等待了,等待元素可見再繼續運行程序;

注:當使用該放發的時候可以參照這個視頻

https://www.bilibili.com/video/av19057145/?p=16

正文:

1.強制等待(sleep)

設置等待最簡單的方法就是強制等待,其實就是time.sleep()方法,不管它什么情況,讓程序暫停運行一定時間,時間過后繼續運行;缺點時不智能,設置的時間太短,元素還沒有加載出來,那照樣會報錯;設置的時間太長,則會浪費時間,不要小瞧每次幾秒的時間,case多了,代碼量大了,很多個幾秒就會影響整體的運行速度了;所以盡量少用這個

2.隱性等待(implicitly_wait())

driver.implicitly_wait(),隱性等待設置了一個時間,在一段時間內網頁是否加載完成,如果完成了,就進行下一步;在設置的時間內沒有加載完成,則會報超時加載;

# -*- coding: utf-8 -*-

fromselenium import webdriver

import time

driver=webdriver.Chrome()

driver.implicitly_wait(20) # 隱性等待,最長等30秒

driver.get('https://www.baidu.com')

time.sleep(3)

driver.quit()

缺點也是不智能,因為隨著ajax技術的廣泛應用,頁面的元素往往都可以時間局部加載,也就是在整個頁面沒有加載完的時候,可能我們需要的元素已經加載完成了,那就么有必要再等待整個頁面的加載,執行進行下一步,而隱性等待滿足不了這一點;

另外一點,隱性等待的設置時全局性的,在開頭設置過之后,整個的程序運行過程中都會有效,都會等待頁面加載完成;不需要每次設置一遍;

3.顯性等待(WebDriverWait)

WebDriverWait(driver,?20,?0.5).until(expected_conditions.presence_of_element_located(locator)),selenium中的wait模塊的WebDriverWait()方法,配合until或者until_not方法,再輔助以一些判斷條件,就可以構成這樣一個場景:每經過多少秒就查看一次locator的元素是否可見,如果可見就停止等待,如果不可見就繼續等待直到超過規定的時間后,報超時異常;當然也可以判斷某元素是否在規定時間內不可見等等的各種場景吧,需要根據你自己實際的場景選擇判斷條件;

# -*- coding: utf-8 -*-

fromselenium import webdriverfromselenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions asECfromselenium.webdriver.common.by import By

driver=webdriver.Firefox()

driver.get('https://huilansame.github.io')WebDriverWait(driver,20,0.5).until(

EC.presence_of_element_located((By.LINK_TEXT, 'CSDN')))

print driver.find_element_by_link_text('CSDN').get_attribute('href')

driver.close()

expected_conditions模塊中提供了很多可以提供判斷的條件:

selenium.webdriver.support.expected_conditions(模塊)

這兩個條件類驗證title,驗證傳入的參數title是否等于或包含于driver.title

title_is

title_contains

這兩個人條件驗證元素是否出現,傳入的參數都是元組類型的locator,如(By.ID,'kw')

顧名思義,一個只要一個符合條件的元素加載出來就通過;另一個必須所有符合條件的元素都加載出來才行

presence_of_element_located

presence_of_all_elements_located

這三個條件驗證元素是否可見,前兩個傳入參數是元組類型的locator,第三個傳入WebElement

第一個和第三個其實質是一樣的

visibility_of_element_located

invisibility_of_element_located

visibility_of

這兩個人條件判斷某段文本是否出現在某元素中,一個判斷元素的text,一個判斷元素的value

text_to_be_present_in_element

text_to_be_present_in_element_value

這個條件判斷frame是否可切入,可傳入locator元組或者直接傳入定位方式:id、name、index或WebElement

frame_to_be_available_and_switch_to_it

這個條件判斷是否有alert出現

alert_is_present

這個條件判斷元素是否可點擊,傳入locator

element_to_be_clickable

這四個條件判斷元素是否被選中,第一個條件傳入WebElement對象,第二個傳入locator元組

第三個傳入WebElement對象以及狀態,相等返回True,否則返回False

第四個傳入locator以及狀態,相等返回True,否則返回False

element_to_be_selected

element_located_to_be_selected

element_selection_state_to_be

element_located_selection_state_to_be

最后一個條件判斷一個元素是否仍在DOM中,傳入WebElement對象,可以判斷頁面是否刷新了

staleness_of

總結

以上是生活随笔為你收集整理的python selenium 等待页面加载_python selenium 三种等待方式详解(实战常用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。