国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python之selenium入門教程

這篇具有很好參考價值的文章主要介紹了python之selenium入門教程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

selenium,一個第三方庫,可以通過給driver發(fā)送命令來操作瀏覽器,以達(dá)到模擬人操作瀏覽器,實現(xiàn)網(wǎng)頁自動化、測試等,減少了重復(fù)性工作。
selenium的工作的基本架構(gòu)如下:
python之selenium入門教程

安裝

本文是在python環(huán)境下使用selenium,使用瀏覽器是Chrome,系統(tǒng)是win10系統(tǒng)。
python環(huán)境的配置這里就不多說了
selenium安裝:pip install selenium
Driver安裝:

  • chromedriver下載:
    • 國內(nèi)鏡像下載地址:https://registry.npmmirror.com/binary.html?path=chromedriver
    • 打開chrome瀏覽器,打開chrome://settings/help頁面,即可查看chrome版本號
    • 根據(jù)Chrome的版本號下載對應(yīng)版本或稍微高于該版本的chromedirver,然后解壓
  • 環(huán)境變量配置:
    • 配置系統(tǒng)環(huán)境變量path,將chromedirver的解壓包所在目錄添加進(jìn)去,然后點擊確定進(jìn)行保存
      python之selenium入門教程

    • 查看是否配置成功
      python之selenium入門教程

使用

selenium的使用基本思路如下:

  • 步驟1:打開瀏覽器
  • 步驟2:操作瀏覽器或驗證頁面數(shù)據(jù)等
  • 步驟3:關(guān)閉瀏覽器進(jìn)程

示例:

from selenium import webdriver

if __name__ == "__main__":
    # 由于selenium是通過driver去操作瀏覽器的,所以我們需要對應(yīng)瀏覽器的driver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com")
    # 操作瀏覽器或驗證頁面數(shù)據(jù)等
	print("xxx")
    # 關(guān)閉瀏覽器進(jìn)程
    driver.quit()

瀏覽器驅(qū)動

從前面的selenium工作原理我們可以了解到,我們的代碼并不是直接去操作瀏覽器的,而是通過給瀏覽器驅(qū)動driver發(fā)送命令,driver去操作瀏覽器的,簡單點理解就是跟selenium對接的是driver,所以我們都是先創(chuàng)建一個driver去進(jìn)行后面的操作。

驅(qū)動對象WebDriver

selenium支持的瀏覽器驅(qū)動有:Firefox、Chrome、Ie、Edge、Safari等瀏覽器的驅(qū)動(需要自己手動安裝對應(yīng)的瀏覽器驅(qū)動)
selenium創(chuàng)建瀏覽器驅(qū)動對象的語法如下:

import time
from selenium import webdriver

# 創(chuàng)建 Firefox 瀏覽器驅(qū)動對象
driver = webdriver.Firefox()

# 創(chuàng)建 Chrome 瀏覽器驅(qū)動對象
driver = webdriver.Chrome()

# 創(chuàng)建 IE 瀏覽器驅(qū)動對象
driver = webdriver.Ie()

# 創(chuàng)建 Edge 瀏覽器驅(qū)動對象
driver = webdriver.Edge()

# 創(chuàng)建 Safari 瀏覽器驅(qū)動對象
driver = webdriver.Safari()

打開網(wǎng)頁

驅(qū)動對象WebDriver的創(chuàng)建相當(dāng)于打開了瀏覽器,我們打開瀏覽器肯定是想訪問某個網(wǎng)頁的,所以接下來就是打開網(wǎng)頁,對應(yīng)的方法是:get(url)
get(url)是WebDriver對象的方法,所以需要先創(chuàng)建WebDriver對象。

關(guān)閉瀏覽器

相關(guān)操作執(zhí)行完成后,最后肯定是要關(guān)閉瀏覽器的,不然打開太多瀏覽器,會占用資源。關(guān)閉瀏覽器有2種方式:close()quit()

方法 描述
close() 關(guān)閉當(dāng)前標(biāo)簽頁面
quit() 關(guān)閉瀏覽器

注:如果當(dāng)前瀏覽器只有一個標(biāo)簽頁,close()有時能達(dá)到quit()的效果,因為有些瀏覽器判斷沒有標(biāo)簽頁的時候會默認(rèn)為關(guān)閉瀏覽器,比如Chrome。
示例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    # 打開百度首頁
    driver.get("https://www.baidu.com")
    # 點擊 新聞 ,新標(biāo)簽頁打開百度新聞
    driver.find_element(By.LINK_TEXT, "新聞").click()
    # 在百度首頁點擊 視頻,打開百度視頻
    driver.find_element(By.LINK_TEXT, "視頻").click()
    time.sleep(2)
    # 關(guān)閉百度首頁這個標(biāo)簽頁
    driver.close()
    time.sleep(2)
    # 關(guān)閉瀏覽器
    driver.quit()

執(zhí)行結(jié)果如下:
python之selenium入門教程
從關(guān)閉瀏覽器這里可以看出來,WebDriver對象的當(dāng)前頁面并不是我們看到的新標(biāo)簽頁,如果想切換到其他頁面,就需要用到switch_to()方法,這個后面系列再具體介紹。

定位元素

瀏覽器頁面除了給我們展示數(shù)據(jù)外,還需要我們?nèi)ゲ僮黜撁妫热琰c擊、長按、拖拽、雙擊指定元素等,在操作元素時,我們得讓driver知道要操作的元素,即selenium需要給到元素的定位。

find_element()

早期的selenium提供了針對id、name、xpath等多種方式的具體方法來定位到具體的元素,比如find_element_by_id()、find_element_by_name()等,在后續(xù)的升級中,這些方法被棄用了,現(xiàn)在統(tǒng)一使用find_element(by=By.ID, value=None)方法,該方法包含了id、name、xpath等定位方式

find_element(by=By.ID, value=None)是WebDriver對象用于定位元素的方法,返回對應(yīng)元素對象(WebElement),我們的點擊、拖拽等操作都是在元素對象的基礎(chǔ)上進(jìn)行的
參數(shù)說明

  • by:指定按照對應(yīng)的方式來定位元素
    • By.ID,根據(jù)查找標(biāo)簽中的id屬性來定位元素
    • By.NAME,根據(jù)查找標(biāo)簽中的name屬性來定位元素
    • By.CLASS_NAME,根據(jù)class屬性指定的值來查找元素
    • By.CSS_SELECTOR,根據(jù)css選擇器的方式來查找元素
    • By.XPATH,根據(jù)XPath語法來查找元素
    • By.LINK_TEXT,查找文本精確匹配的a標(biāo)簽元素
    • By.PARTIAL_LINK_TEXT,查找文本模糊匹配的a標(biāo)簽元素
    • By.TAG_NAME,根據(jù)標(biāo)簽名稱來查找元素,不太好用,不常用

value:元素位置,字符串類型

注意:XPath使用范圍比較廣,但是查找速度比較慢,id、name、class其實是根據(jù)css_selector來實現(xiàn)的,css_selector查找元素比較快;一個頁面中,id和name一般是唯一的(人為的約定俗成,非強制),具體使用哪種方式,要依據(jù)頁面的改動程度、前端頁面的層級等確定。
XPath語法參考:XPath入門
css_selector語法參考:Python + selenium 元素定位(五)-----css selector 的高級用法

示例:
如下示例是打開百度首頁,搜索”春節(jié)“,然后點擊”百度首頁“返回百度首頁,在首頁中點擊”幫助中心“進(jìn)入幫助中心頁面

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com/")
    # 常用的屬性定位方式來定位搜索框
    # we = driver.find_element(By.ID, "kw")  # 根據(jù)ID屬性定位搜索框
    # we = driver.find_element(By.NAME, "wd")  # 根據(jù)NAME屬性定位搜索框
    # we = driver.find_element(By.CLASS_NAME, "s_ipt")  # 根據(jù)CLASS_NAME屬性定位搜索框
    # 通過CSS選擇器定位搜索框
    # we = driver.find_element(By.CSS_SELECTOR, "#kw") # '#'符號表示id,#kw表示id="kw"
    # we = driver.find_element(By.CSS_SELECTOR, ".s_ipt")  # '.'符號表示class,.s_ipt表示class="s_ipt"
    # we = driver.find_element(By.CSS_SELECTOR, '[autocomplete="off"]')  # []內(nèi)指定屬性及其值,表示根據(jù)屬性來定位元素
    # 通過xpath定位搜索框
    we = driver.find_element(By.XPATH, "http://input[@id='kw']")
    # 往搜索框里輸入”春節(jié)“的搜索內(nèi)容
    we.send_keys("春節(jié)")
    time.sleep(3)

    # 精準(zhǔn)匹配a標(biāo)簽的文本內(nèi)容”百度首頁“,然后點擊,進(jìn)入百度首頁
    we1 = driver.find_element(By.LINK_TEXT, "百度首頁")
    we1.click()
    time.sleep(2)

    # 模糊匹配a標(biāo)簽的文本內(nèi)容包含”幫助“,點擊,進(jìn)入 幫助中心 頁面
    we2 = driver.find_element(By.PARTIAL_LINK_TEXT, "幫助")
    we2.click()
    time.sleep(2)

    # 終止相關(guān)進(jìn)程
    driver.quit()

find_elements()

find_element(by=By.ID, value=None)是返回單個的WebElement對象,find_elements(by=By.ID, value=None)是返回一個列表(List)對象,列表中都是WebElement對象。

如圖,想獲取百度首頁的百度熱搜下詞條內(nèi)容,當(dāng)前頁面一共有6條,find_element()肯定不符合預(yù)期,find_elements()滿足要求。
python之selenium入門教程

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com/")
    # 通過class屬性定位元素
    wes = driver.find_elements(By.CLASS_NAME, "title-content-title")
    print(f"find_elements()返回的數(shù)據(jù)類型是:{type(wes)}")
    for we in wes:
        print("----------------------------")
        print(we)
        print(we.text)
    time.sleep(3)

    # 終止相關(guān)進(jìn)程
    driver.quit()

執(zhí)行結(jié)果如下:

find_elements()返回的數(shù)據(jù)類型是:<class 'list'>
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="02a46e1c-eeed-446d-b78f-2fd261c5d189")>
紅紅火火舞新春
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="c7fe0312-9739-4256-ae6b-6be8a4d5f610")>
春耕備耕忙
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="b2effc84-5b55-4cfc-814c-3d8509f30647")>
知情人:仍在搜尋胡鑫宇飯卡
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="bb8af466-32ad-45c4-b9e2-e2eb1af0bb6f")>
官方人士:錄音筆在深圳恢復(fù)數(shù)據(jù)
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="fdfeb919-1070-4c04-9e71-e6c17975efcd")>
保時捷官網(wǎng)12.4萬元帕納梅拉遭搶購
----------------------------
<selenium.webdriver.remote.webelement.WebElement (session="daf7a5e628209860b164358803cd4801", element="4ea5b289-73a5-4cf2-8782-06d8ad08e1f3")>
5萬年一遇綠色彗星逼近地球

元素操作

我們獲取到元素之后,需要對元素進(jìn)行操作,比如在輸入框中輸入內(nèi)容,點擊按鈕等操作。
WebElement對象有多個屬性和方法,但常用的就幾個:
WebElement常用屬性:

屬性 屬性描述
size 高和寬
rect 高、寬和xy坐標(biāo)
tag_name 標(biāo)簽名稱
text 文本內(nèi)容

WebElement常用方法:

屬性 屬性描述
send_keys() 輸入內(nèi)容(對同一個元素多次進(jìn)行,除非是頁面自有的邏輯,否則是按照追加的方式輸入的)
clear() 清空內(nèi)容
click() 單擊,如果單擊后,當(dāng)前標(biāo)簽頁跳轉(zhuǎn)頁面時,WebDriver對象會更新為當(dāng)前跳轉(zhuǎn)后的頁面,如果是新標(biāo)簽頁打開其他頁面時,WebDriver對象還是在原標(biāo)簽頁,不會更新為新標(biāo)簽頁
get_attribute() 獲得屬性值
is_selected() 是否被選中
is_enabled() 是否可用
is_displayed() 是否顯示

實例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com/")
    # 定位 搜索輸入框
    search = driver.find_element(By.ID, "kw")
    # 在搜索輸入框中輸入“百度翻譯”,百度首頁會自動搜索
    search.send_keys("百度翻譯")
    time.sleep(3)

    # 清空搜索框的內(nèi)容
    search.clear()
    time.sleep(3)

    # 定位 “百度首頁”
    more = driver.find_element(By.LINK_TEXT, "更多")
    print("”更多“的部分方法值:")
    print(f"get_attribute():{more.get_attribute('href')}")
    print(f"is_selected():{more.is_selected()}")
    print(f"is_enabled():{more.is_enabled()}")
    print(f"is_displayed():{more.is_displayed()}")

    print("\n“更多“的部分屬性值:")
    print(f"size值:{more.size}")
    print(f"rect值:{more.rect}")
    print(f"tag_name值:{more.tag_name}")
    print(f"text內(nèi)容:{more.text}")

    # 點擊”更多“
    more.click()
    time.sleep(3)

    # 終止相關(guān)進(jìn)程
    driver.quit()

等待

在打開網(wǎng)頁時,某些內(nèi)容會立馬顯示,但是有些內(nèi)容顯示的又比較慢,當(dāng)網(wǎng)速卡的時候,頁面就更慢顯示了,但是程序執(zhí)行的速度又是非??斓?,就會導(dǎo)致一個問題:頁面元素還在加載中,程序(代碼)就去定位元素了,導(dǎo)致程序定位失敗、退出執(zhí)行。
為了避免這種情況發(fā)生,我們在定位元素前,就設(shè)置一定的延遲時間,盡量讓相關(guān)元素顯示后再去定位元素,可以有效的降低程序失敗的情況發(fā)生。
有3種等待方式:

  • 直接等待:time.sleep(秒數(shù)),即直接等待指定的秒數(shù)再執(zhí)行后續(xù)語句,不夠靈活
  • 隱式等待:WebDriver().implicitly_wait(秒數(shù)),每0.5秒輪詢查找元素,如果在指定的時間內(nèi)找到了元素,則繼續(xù)執(zhí)行,如果沒有找到,則報錯,是針對該WebDriver對象的find_element()和find_elements(),相當(dāng)于全局的,沒有對元素的“個性化”,不太建議使用
  • 顯示等待:

直接等待

直接等待,也叫強制等待,就是必須等待指定的時間,才執(zhí)行下一步。需要導(dǎo)入time,使用time.sleep(秒數(shù))。除非頁面特有的邏輯(比如非會員必須觀看30秒廣告等),否則不建議大量使用time.sleep()方法。
示例:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com/")
    # 直接等待2秒
    time.sleep(2)
    # 點擊更多,跳轉(zhuǎn)到百度應(yīng)用列表頁面
    driver.find_element(By.LINK_TEXT, "更多").click()
    #等待2秒后,關(guān)閉瀏覽器進(jìn)程
    time.sleep(2)
    driver.quit()

隱式等待

隱式等待是在WebDriver對象上設(shè)置并生效的,當(dāng)WebDriver對象通過implicitly_wait(秒數(shù))方法設(shè)置了隱式等待的時間后,通過當(dāng)前WebDriver對象使用的find_element()find_elements()方法時,會每個一段時間(0.5秒)去頁面查找,查找到后直接進(jìn)行下一步,沒有查找到則繼續(xù)查詢,若超過了設(shè)置的等待時間還沒找到對應(yīng)的元素,則直接報錯。
隱式等待相當(dāng)于全局性的,即WebDriver對象一次設(shè)置,對其調(diào)用的find_element()find_elements()方法都生效。
隱式等待的時間設(shè)置比較方便,但是對于某些場景又不合適,設(shè)置的等待時間需要考慮到所有用到元素的最大的等待時間,但是一個頁面中,不同的功能所需的時間又不一樣,比如上傳\下載文件和頁面元素加載所花費的時間顯然時不在同一個階段的(比如上傳完一個大容量視頻后的視頻上傳成功提示元素和只是單純在頁面顯示文字,顯然后者能很快顯示),隱式時間設(shè)置過長時,若被測產(chǎn)品運行有問題,會導(dǎo)致執(zhí)行時間的拉長,不利于自動化等的批量執(zhí)行和總體分析。
示例:

from selenium import webdriver
from selenium.webdriver.common.by import By

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度首頁
    driver.get("https://www.baidu.com/")
    # 設(shè)置隱式等待的時間
    driver.implicitly_wait(12)
    # 在搜索輸入框中輸入“一人之下”
    driver.find_element(By.ID, "kw").send_keys("一人之下")
    # 點擊搜索頁中,搜索輸入框左側(cè)的百度圖標(biāo)回到百度首頁
    driver.find_element(By.ID, "result_logo").click()
    # 關(guān)閉瀏覽器進(jìn)程
    driver.quit()

顯示等待

顯示等待與隱式等待正好相反,顯示等待是針對某一個元素的,不是全局性質(zhì)的,當(dāng)然,定位元素過多的時候,又覺得一次性設(shè)置的隱式等待很香O(∩_∩)O。
顯示等待使用的是WebDriverWait對象的until()until_not()方法(可以說是WebDriverWait的左右護(hù)法了)

顯示等待中,等待的時間設(shè)置是在創(chuàng)建WebDriverWait對象時:

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
參數(shù)說明:

  • driver:WebDriver對象
  • timeout:等待時間,即超時時間,如果在指定時間內(nèi)沒有找到,則報錯
  • poll_frequency:輪詢查找的時間,單位為秒,默認(rèn)0.5秒

WebDriverWait對象的until()和until_not()方法則用來判斷是否繼續(xù)執(zhí)行

until(method, message="")until_not(method, message="")
參數(shù)說明:

  • method:函數(shù)名(函數(shù)必須要有一個參數(shù))
    • until():如果函數(shù)執(zhí)行返回的是False(或0或None或空列表、空集合等等所有不為真的數(shù)據(jù)),則TimeoutException報錯,若返回的數(shù)據(jù)為真,則執(zhí)行下一句
    • until_not():與until()相反,若函數(shù)返回為真的數(shù)據(jù),則TimeoutException報錯,若函數(shù)返回不為真的數(shù)據(jù),則執(zhí)行下一句
  • message:若函數(shù)執(zhí)行返回了不為真的數(shù)據(jù),則TimeoutException報錯時,報錯信息為message

until()的示例:

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    def fun1(x):
        return True
    def fun2(x):
        return False
    wd = WebDriverWait(driver, 3)
    wd.until(fun1, "方法fun1返回了假")
    print("fun1執(zhí)行完成,找到元素")
    wd.until(fun2, "方法fun2返回了假")
    print("fun2執(zhí)行完成,找到元素")

    # 終止相關(guān)進(jìn)程
    driver.quit()

執(zhí)行結(jié)果如下:

fun1執(zhí)行完成,找到元素
Traceback (most recent call last):
  File "G:\python_project\web\demo.py", line 14, in <module>
    wd.until(fun2, "方法fun2返回了假")
  File "G:\python_project\web\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 方法fun2返回了假

從執(zhí)行結(jié)果來看,程序并沒有執(zhí)行到print("fun2執(zhí)行完成,找到元素")wd.until(fun2, "方法fun2返回了假")這一步報錯了,并打印了我們傳入的message內(nèi)容

until_not()示例

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    def fun1(x):
        return True
    def fun2(x):
        return False
    wd = WebDriverWait(driver, 3)
    wd.until_not(fun2, "方法fun2返回了真")
    print("fun2執(zhí)行完成,找到元素")
    wd.until_not(fun1, "方法fun1返回了真")
    print("fun1執(zhí)行完成,找到元素")

    # 終止相關(guān)進(jìn)程
    driver.quit()

執(zhí)行結(jié)果如下:

fun2執(zhí)行完成,找到元素
Traceback (most recent call last):
  File "G:\python_project\web\demo.py", line 14, in <module>
    wd.until_not(fun1, "方法fun1返回了真")
  File "G:\python_project\web\lib\site-packages\selenium\webdriver\support\wait.py", line 118, in until_not
    raise TimeoutException(message)
selenium.common.exceptions.TimeoutException: Message: 方法fun1返回了真

從以上2個示例來看,如果想要做到顯示等待某個元素,我們需要在until()until_not()中傳入method參數(shù)來實現(xiàn),method參數(shù)傳入的是函數(shù),函數(shù)中需要實現(xiàn)對元素是否存在的判斷,示例如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度翻譯頁面,翻譯triggered
    driver.get("https://fanyi.baidu.com/#en/zh/triggered")
    def show_banner(x):
        # 只有在有翻譯的時候才會顯示廣告位
        return len(driver.find_elements(By.CLASS_NAME, "app-side-banner")) > 0
    wd = WebDriverWait(driver, 3)
    wd.until(show_banner, "未顯示廣告位")
    print("顯示了廣告位")

    # 終止相關(guān)進(jìn)程
    driver.quit()

show_banner(x)實現(xiàn)了判斷某個元素存不存在邏輯,until()方法傳入了show_banner函數(shù),相當(dāng)于在3秒內(nèi)查詢該元素存不存在,不存在則報錯,執(zhí)行結(jié)果如下:

顯示了廣告位

從執(zhí)行結(jié)果來看,確實顯示了廣告位
python之selenium入門教程
但是如果每一個元素都需要實現(xiàn)一個函數(shù)(或者使用匿名函數(shù)),豈不是很麻煩,所以selenium也提供了一系列元素判斷方法,這些方法封裝在了expected_conditions中,使用示例如下:

import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions

if __name__ == "__main__":
    # 定義一個WebDriver對象
    driver = webdriver.Chrome()
    # 打開百度翻譯頁面
    driver.get("https://fanyi.baidu.com/#en/zh")
    # 首次打開百度翻譯頁面,有百度翻譯的引導(dǎo)彈窗,等待彈窗顯示后,關(guān)閉該彈窗
    # 確定引導(dǎo)彈窗顯示
    WebDriverWait(driver, 4).until(expected_conditions.element_to_be_clickable((By.CLASS_NAME, "app-guide-close")))
    # 點擊引導(dǎo)彈窗的關(guān)閉按鈕,關(guān)閉引導(dǎo)彈窗
    driver.find_element(By.CLASS_NAME, "app-guide-close").click()
    # 為了確認(rèn)是否關(guān)閉了引導(dǎo)彈窗,強制等待3秒查看效果(人眼查看)
    time.sleep(3)
    # 使用expected_conditions下的visibility_of_element_located()判斷廣告位是否不存在,不存在返回True
    banner_show = expected_conditions.visibility_of_element_located((By.CLASS_NAME, "app-side-banner"))
    print("廣告位不存在" if banner_show else "廣告位存在")

    # 終止相關(guān)進(jìn)程
    driver.quit()

python之selenium入門教程
執(zhí)行結(jié)果如下:

廣告位不存在

expected_conditions有提供了很多方法,基本上從方法名可以判斷出來,詳細(xì)的可以網(wǎng)上找找,這里不詳細(xì)展開了,可以去selenium官網(wǎng)查看,也可以參考的一些博客,如下:
selenium自動化測試(八)-- expected_conditions詳解
selenium中的expected_conditions模塊詳解
selenium細(xì)節(jié)實戰(zhàn)02–>好用的expected_conditions模塊

等待說明

三種等待方式可以混合使用,雖然expected_conditions的諸多方法底層其實是調(diào)用了find_element()方法,但implicitly_wait()和WebDriverWait()一起使用時,等待時間是兩者間設(shè)置時長最長的那個(貌似說不能混合使用,但是我混了后還沒報錯。。。暫時就先不管了)文章來源地址http://www.zghlxwxcb.cn/news/detail-410290.html

到了這里,關(guān)于python之selenium入門教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python第三方庫安裝教程、什么是第三方庫

    Python有一個全球社區(qū):https://pypi.org/,在這里我們可以搜索任何主題的Python第三方庫。PyPI全稱是Python Package Index,指的是Python包的索引,它由PSF(Python Software Foundation)來維護(hù),并且展示全球Python計算生態(tài)。 我們需要學(xué)會利用PyPI的主站檢索,找到我們使用和關(guān)心的Python第三方

    2024年02月03日
    瀏覽(94)
  • 【Git 入門教程】第三節(jié)、Git的分支和合并

    【Git 入門教程】第三節(jié)、Git的分支和合并

    Git的分支和合并是Git中最重要的概念之一。使用Git可以輕松地創(chuàng)建、切換和合并分支,這為團隊協(xié)作開發(fā)提供了極大的便利。在本文中,我們將介紹Git分支的基本概念和操作方式。 在Git中,分支是指一個代碼庫的不同版本。分支允許開發(fā)者獨立地開發(fā)特定功能或修復(fù)故障,而

    2024年02月07日
    瀏覽(14)
  • .NET Emit 入門教程:第三部分:構(gòu)建模塊(Module)

    .NET Emit 入門教程:第三部分:構(gòu)建模塊(Module)

    在這一部分中,我們將深入討論動態(tài)程序集中模塊的概念以及如何構(gòu)建和管理模塊。 模塊是動態(tài)程序集中的基本單位,它類似于一個獨立的代碼單元,可以包含類型、方法、字段等成員。 在動態(tài)程序集中,模塊扮演著組織代碼和實現(xiàn)代碼復(fù)用的關(guān)鍵角色。 它們允許開發(fā)人員

    2024年03月22日
    瀏覽(18)
  • Selenium入門詳細(xì)教程+實例演示

    Selenium入門詳細(xì)教程+實例演示

    目錄 1.Selenium概述 ? ?1.1什么是Selenium ? ?1.2Selenium的優(yōu)勢 ? ?1.3Selenium WebDriver原理 2.Selenium環(huán)境搭建 3.Selenium 簡單示例 4.八大元素定位 ? ?4.1定位方式 ? ?4.2定位方式的用法 5.Selenium API ? ?5.1WebDriver 常用 API ? ?5.2WebElement 常用 API ? ?5.3代碼示例 6.元素等待機制 ? ?6.1硬性等待

    2024年02月13日
    瀏覽(46)
  • 很合適新手入門使用的Python游戲開發(fā)包pygame實例教程-01[開發(fā)環(huán)境配置與第一個界面]

    很合適新手入門使用的Python游戲開發(fā)包pygame實例教程-01[開發(fā)環(huán)境配置與第一個界面]

    我們假定你已經(jīng)安裝好了我們開發(fā)python程序的sublime text,如果不知道怎么安裝的可以參照我前面的博文。這里只需要解決的是配置好Pygame的問題。本篇博文主要解決開發(fā)環(huán)境配置以及第一個游戲界面的顯示問題。 文章原出處: https://blog.csdn.net/haigear/article/details/130173836 沒有

    2024年01月25日
    瀏覽(35)
  • C語言入門教程,C語言學(xué)習(xí)教程(第三部分:C語言變量和數(shù)據(jù)類型)二

    C語言入門教程,C語言學(xué)習(xí)教程(第三部分:C語言變量和數(shù)據(jù)類型)二

    前面我們多次提到了字符串,字符串是多個字符的集合,它們由 \\\" \\\" 包圍,例如 \\\"http://c.biancheng.net\\\" 、 \\\"C語言中文網(wǎng)\\\" 。字符串中的字符在內(nèi)存中按照次序、緊挨著排列,整個字符串占用一塊連續(xù)的內(nèi)存。 當(dāng)然,字符串也可以只包含一個字符,例如 \\\"A\\\" 、 \\\"6\\\" ;不過為了操作方

    2024年01月17日
    瀏覽(21)
  • 73. python第三方庫安裝教程(超詳細(xì))

    73. python第三方庫安裝教程(超詳細(xì))

    Python 的庫分為2類。 標(biāo)準(zhǔn)庫:不需要安裝,需要導(dǎo)入。 第三庫:需要安裝、需要導(dǎo)入。 【導(dǎo)入語法】 import + 庫名 【示例】 openpyxl = open + python + xlsx 【簡寫如下】 openpyxl = open +py + xl open 是打開的意思。 py 指 python 。 xl 是 xlsx/xlsm/xltx/xltm 的縮寫。 xlsx/xlsm/xltx/xltm 是電子表格的

    2024年02月09日
    瀏覽(25)
  • Python第三方庫安裝詳細(xì)教程(圖文結(jié)合)

    Python第三方庫安裝詳細(xì)教程(圖文結(jié)合)

    在安裝Python第三方庫要先確保Python環(huán)境已經(jīng)安裝,如果沒有安裝可以參考我的文章。 Pytnon安裝教程: https://blog.csdn.net/qq_41515916/article/details/130216678 Pycharm安裝及漢化教程: https://blog.csdn.net/qq_41515916/article/details/130283522 Python模塊安裝主要有兩種方法(安裝方法很多,只列舉了常

    2024年02月09日
    瀏覽(30)
  • selenium入門超詳細(xì)教程——網(wǎng)頁自動化操作

    selenium入門超詳細(xì)教程——網(wǎng)頁自動化操作

    Selenium是廣泛使用的模擬瀏覽器運行的庫,它是一個用于Web應(yīng)用程序測試的工具。 Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣,并且支持大多數(shù)現(xiàn)代 Web 瀏覽器。下面就進(jìn)入正式的學(xué)習(xí)階段。 激活虛擬環(huán)境 通過pip安裝 針對不同的瀏覽器,需要安裝不同的驅(qū)動

    2024年02月03日
    瀏覽(27)
  • pip(Python包管理工具)安裝第三方庫教程

    pip(Python包管理工具)安裝第三方庫教程

    ??首先就是按下 Win + R ,輸入cmd后點擊 Enter ;在dos界面輸入“python” ??出現(xiàn)“Python + 版本號”證明可直接在該路徑下安裝第三方庫(安裝設(shè)置問題),如果顯示報錯,可以在環(huán)境變量中添加Python路徑,或者將目錄切換到Python安裝目錄下的Scripts文件夾下,輸入“cmd\\\", E

    2024年02月06日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包