《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》 課件-第5章 抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)_第1頁
《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》 課件-第5章 抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)_第2頁
《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》 課件-第5章 抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)_第3頁
《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》 課件-第5章 抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)_第4頁
《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》 課件-第5章 抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)《Python網(wǎng)絡(luò)爬蟲基礎(chǔ)教程》學(xué)習(xí)目標(biāo)/Target了解抓取動(dòng)態(tài)網(wǎng)頁的實(shí)現(xiàn)技術(shù),能夠說出Selenium有哪些特點(diǎn)掌握Selenium和WebDriver的安裝與配置,能夠獨(dú)立安裝Selenium和WebDriver掌握Selenium的基本使用,能夠使用Selenium實(shí)現(xiàn)抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)的功能章節(jié)概述/Summary通常,網(wǎng)站上動(dòng)態(tài)網(wǎng)頁的比例要遠(yuǎn)遠(yuǎn)高于靜態(tài)網(wǎng)頁。相比于靜態(tài)網(wǎng)頁,動(dòng)態(tài)網(wǎng)頁不會(huì)在加載完成后立即顯示所有的內(nèi)容,而會(huì)受時(shí)間、環(huán)境等因素的影響發(fā)生改變。此時(shí)再使用第3章的技術(shù)已經(jīng)無法滿足需求。為了抓取動(dòng)態(tài)網(wǎng)頁,Python提供了Selenium庫,通過該庫可以模擬用戶在瀏覽器上執(zhí)行諸如單擊按鈕、輸入文本等行為,獲取網(wǎng)頁上動(dòng)態(tài)加載的數(shù)據(jù)。本章將針對抓取動(dòng)態(tài)網(wǎng)頁數(shù)據(jù)的內(nèi)容進(jìn)行介紹。目錄/Contents5.15.25.3抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)Selenium和WebDriver的安裝與配置Selenium的基本使用5.4實(shí)踐項(xiàng)目:采集集信達(dá)平臺(tái)的短信服務(wù)日志信息抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)5.1了解抓取動(dòng)態(tài)網(wǎng)頁的實(shí)現(xiàn)技術(shù),能夠說出Selenium的特點(diǎn)學(xué)習(xí)目標(biāo)5.1抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)對于動(dòng)態(tài)網(wǎng)頁的數(shù)據(jù)可以直接使用模擬瀏覽器運(yùn)行的方式進(jìn)行實(shí)現(xiàn),這樣做就可以不用管網(wǎng)頁內(nèi)部是如何使用JavaScript渲染頁面的,也不用管Ajax請求中到底有沒有加密參數(shù),在瀏覽器中看到是什么樣的內(nèi)容,抓取的結(jié)果便是什么樣的內(nèi)容。Python中提供了許多模擬瀏覽器運(yùn)行的庫,包括Selenium、Splash、PyAutoGUI等。5.1抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)SeleniumSplashPyAutoGUISelenium是一個(gè)開源的、便攜式的自動(dòng)化測試工具,它最初是為網(wǎng)站自動(dòng)化測試而開發(fā)的,Selenium支持與所有主流的瀏覽器(如Chrome、Firefox、Edge、IE等)配合使用,也包括諸如PhantomJS、HeadlessChrome等一些無界面的瀏覽器。Selenium可以直接運(yùn)行在瀏覽器中,模擬用戶使用瀏覽器完成一些動(dòng)作,包括自動(dòng)加載頁面、輸入文本、選擇下拉框、單擊按鈕、單擊超鏈接等。不過,Selenium本身不帶瀏覽器,它需要通過一個(gè)瀏覽器驅(qū)動(dòng)程序WebDriver才能與所選瀏覽器進(jìn)行交互。5.1抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)SeleniumSplashPyAutoGUISplash用于JavaScript渲染服務(wù),是一個(gè)帶有HTTPAPI的輕量級Web瀏覽器,而且對接了Twisted(事件驅(qū)動(dòng)型的網(wǎng)絡(luò)引擎)和Qt5(進(jìn)行QtC++軟件開發(fā)基本框架的最新版本)。Splash實(shí)現(xiàn)了以下功能。采用異步方式并行處理多個(gè)網(wǎng)頁渲染過程。獲取渲染后頁面的源代碼或截圖。通過關(guān)閉圖像或使用AdblockPlus規(guī)則加快頁面渲染速度。可執(zhí)行特定的JavaScript腳本。可以通過Lua腳本控制頁面的渲染過程。以HAR(HTTPArchive)格式呈現(xiàn)獲取渲染的詳細(xì)過程。5.1抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)SeleniumSplashPyAutoGUIPyAutoGUI是一個(gè)用于自動(dòng)化測試的庫,它可以使用Python程序控制鼠標(biāo)和鍵盤自動(dòng)與其他應(yīng)用程序交互,支持Windows、macOS

和Linux等平臺(tái)。PyAutoGUI具有以下一些特點(diǎn)。移動(dòng)鼠標(biāo)并在其他應(yīng)用程序的窗口中單擊或鍵入文本。向應(yīng)用程序發(fā)送按鍵,比如填寫表格。截取屏幕截圖并發(fā)送一張圖像,在屏幕上找到它。定位應(yīng)用程序的窗口,并移動(dòng)、調(diào)整大小、最大化、最小化或關(guān)閉該窗口(目前僅適用于Windows)。5.1抓取動(dòng)態(tài)網(wǎng)頁的技術(shù)Selenium和WebDriver的安裝與配置5.2掌握Selenium和WebDriver的安裝,能夠獨(dú)立安裝Selenium和WebDriver學(xué)習(xí)目標(biāo)5.2Selenium和WebDriver的安裝與配置在使用Selenium抓取動(dòng)態(tài)網(wǎng)頁的數(shù)據(jù)之前,我們需要先在計(jì)算機(jī)上安裝Selenium,以及與Selenium一起配合使用的瀏覽器驅(qū)動(dòng)WebDriver。為了避免后續(xù)在網(wǎng)絡(luò)爬蟲程序中重復(fù)指定WebDriver的執(zhí)行路徑,我們需要為WebDriver配置環(huán)境變量。5.2Selenium和WebDriver的安裝與配置5.2Selenium和WebDriver的安裝與配置

Selenium的安裝Selenium的安裝方式非常簡單,可以直接使用pip命令安裝,具體的安裝命令如下。pipinstallselenium==3.141.0若命令行窗口中出現(xiàn)Successfullyinstalledselenium的提示信息,說明成功安裝了Selenium庫。5.2Selenium和WebDriver的安裝與配置

WebDriver的安裝每種瀏覽器都有一個(gè)特定的WebDriver。WebDriver稱為驅(qū)動(dòng)程序,通過驅(qū)動(dòng)程序?qū)崿F(xiàn)Selenium與瀏覽器之間的交互。瀏覽器驅(qū)動(dòng)程序Chromium/ChromechromeDriverFirefoxgeckodriverEdgeMicrosoftWebDriverIEIEDriverServerOperaoperachromiumdriverSafarisafaridriver5.2Selenium和WebDriver的安裝與配置需要說明的是,不同版本的瀏覽器驅(qū)動(dòng)程序支持的瀏覽器版本也不同,在下載瀏覽器的驅(qū)動(dòng)程序之前,需要先查看當(dāng)前瀏覽器的版本號(hào)。5.2Selenium和WebDriver的安裝與配置步驟1步驟2步驟3步驟4查看Chrome瀏覽器版本單擊Chrome瀏覽器右上角的圖標(biāo)打開自定義及控制GoogleChrome的菜單,在該菜單中選擇“幫助”→“關(guān)于GoogleChrome”打開關(guān)于Chrome頁面。5.2Selenium和WebDriver的安裝與配置步驟2步驟1步驟3步驟4訪問chromedriver官網(wǎng)知道了Chrome瀏覽器的版本號(hào)后,便可以到chromedriver官方網(wǎng)站下載與Chrome瀏覽器版本對應(yīng)的chromedriver的下載列表。5.2Selenium和WebDriver的安裝與配置步驟3步驟1步驟2步驟4下載chromedriver單擊與瀏覽器相應(yīng)版本的ChromeDriver鏈接,進(jìn)入chromedriver的下載頁面。5.2Selenium和WebDriver的安裝與配置步驟4步驟1步驟2步驟3安裝chromedriver單擊“chromedriver_win_32.zip”鏈接,下載ZIP格式的壓縮包到本地,解壓壓縮包便可得到chromedriver.exe程序。5.2Selenium和WebDriver的安裝與配置

WebDriver的配置將WebDriver配置到系統(tǒng)環(huán)境變量后,程序中再次使用WebDriver時(shí),就不需要重復(fù)指定WebDriver的執(zhí)行路徑了。系統(tǒng)屬性對話框添加安裝路徑Selenium的基本使用5.3掌握WebDriver類的使用,能夠通過WebDriver類中的屬性和方法操作瀏覽器和獲取數(shù)據(jù)學(xué)習(xí)目標(biāo)5.3.1WebDriver類的常用屬性和方法5.3.1WebDriver類的常用屬性和方法屬性說明title獲取當(dāng)前頁面的標(biāo)題current_url獲取當(dāng)前頁面的URL地址為模仿用戶真實(shí)操作瀏覽器的過程,webdriver模塊的WebDriver類(表示瀏覽器)中提供了一些執(zhí)行諸如打開瀏覽器、關(guān)閉瀏覽器、刷新頁面、前進(jìn)、后退等入門操作的方法或?qū)傩?。WebDriver類的常用屬性如下所示。5.3.1WebDriver類的常用屬性和方法方法說明get()根據(jù)指定URL地址訪問頁面maximize_window()設(shè)置瀏覽器窗口最大化forward()頁面前進(jìn)back()頁面后退refresh()刷新當(dāng)前頁面save_screenshot()對當(dāng)前瀏覽器窗口進(jìn)行截圖quit()會(huì)話結(jié)束時(shí)退出瀏覽器close()關(guān)閉當(dāng)前窗口為模仿用戶真實(shí)操作瀏覽器的過程,webdriver模塊的WebDriver類(表示瀏覽器)中提供了一些執(zhí)行諸如打開瀏覽器、關(guān)閉瀏覽器、刷新頁面、前進(jìn)、后退等入門操作的方法或?qū)傩?。WebDriver類的常用方法如下所示。5.3.1WebDriver類的常用屬性和方法WebDriver類常用方法、示例如下所示。fromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get("")訪問網(wǎng)站driver.maximize_window()瀏覽器最大化driver.back()#后退driver.forward()#前進(jìn)

driver.refresh()#刷新后退、前進(jìn)、刷新driver.save_screenshot('jd.png')保存圖片5.3.1WebDriver類的常用屬性和方法print(driver.title)獲取標(biāo)題print(driver.current_url)獲取當(dāng)前頁URLWebDriver類常用方法、示例如下所示。掌握定位元素的使用,能夠通過定位的方法獲取數(shù)據(jù)學(xué)習(xí)目標(biāo)5.3.2定位元素Selenium的WebDriver類中提供了定位元素的方法,這些方法按照元素的數(shù)量可以分為定位單個(gè)元素和定位多個(gè)元素。WebDriver類中定位單個(gè)元素的方法如下所示。5.3.2定位元素方法說明find_element()通過指定方式定位元素find_element_by_id()通過id屬性定位元素find_element_by_name()通過name屬性定位元素find_element_by_xpath()通過XPath的路徑表達(dá)式定位元素find_element_by_link_text()通過鏈接文本定位元素find_element_by_partial_link_text()通過部分鏈接文本定位元素find_element_by_tag_name()通過標(biāo)簽名定位元素find_element_by_class_name()通過class屬性定位元素find_element_by_css_selector()通過CSS選擇器定位元素5.3.2定位元素下面演示如何使用Selenium定位元素。通過id屬性定位元素driver=webdriver.Chrome()driver.get('/')#通過id屬性定位元素element=driver.find_element_by_id('header-wrapper')#訪問text屬性輸出元素的文本內(nèi)容print(element.text)5.3.2定位元素下面演示如何使用Selenium定位元素。driver.get("/subject/30279836/comments?status=P")#通過class屬性定位元素element=driver.find_element_by_class_name('short')print(element.text)通過class屬性定位元素5.3.2定位元素下面演示如何使用Selenium定位元素。find_element(self,by=By.ID,value=None)find_element()方法是定位元素的通用方法,與其他幾個(gè)方法相比,它有更加靈活使用方式,可以通過參數(shù)指定定位方式。value:表示元素的名稱或?qū)傩缘闹?。by:表示定位方式。通過指定方式定位元素5.3.2定位元素find_element()方法中的參數(shù)by表示定位方式,該參數(shù)支持的取值及其說明如下所示。取值說明By.ID通過id屬性定位元素By.NAME通過name屬性定位元素By.CLASS_NAME通過class屬性定位元素By.TAG_NAME通過標(biāo)簽名定位元素By.LINK_TEXT通過鏈接文本定位元素By.PARTIAL_LINK_TEXT通過部分鏈接文本定位元素By.CSS_SELECTOR通過CSS選擇器定位元素By.XPATH通過Xpath的路徑表達(dá)式定位元素5.3.2定位元素下面演示如何使用Selenium定位元素。通過指定方式定位元素#導(dǎo)入By類frommon.byimportBy#通過id屬性定位元素element=driver.find_element(by=By.CLASS_NAME,value='short')#訪問text屬性輸出元素中的文本內(nèi)容print(element.text)使用find_element()方法定位豆瓣電影的評論數(shù)據(jù)中class屬性值為short的元素。掌握鼠標(biāo)操作的使用,能夠通過ActionChains類操作鼠標(biāo)學(xué)習(xí)目標(biāo)5.3.3鼠標(biāo)操作常用的鼠標(biāo)操作有雙擊、右擊、拖曳、按住不動(dòng)等,它們都封裝為ActionChains類的方法。ActionChains類中常用的鼠標(biāo)操作方法如下所示。5.3.3鼠標(biāo)操作方法說明click()單擊鼠標(biāo)左鍵context_click()單擊鼠標(biāo)右鍵double_click()雙擊鼠標(biāo)click_and_hold()按住鼠標(biāo)左鍵move_to_element()鼠標(biāo)懸停drag_and_drop()拖曳網(wǎng)頁中選定元素并按住鼠標(biāo)左鍵,移動(dòng)到目標(biāo)元素后釋放鼠標(biāo)按鈕drag_and_drop_by_offset()拖曳網(wǎng)頁中選定元素并按住鼠標(biāo)左鍵,移動(dòng)指定的偏移量后釋放鼠標(biāo)按鈕move_by_offset()將鼠標(biāo)移動(dòng)到與當(dāng)前鼠標(biāo)位置的偏移處send_keys()發(fā)送某個(gè)鍵到當(dāng)前焦點(diǎn)的元素release()釋放按住的鼠標(biāo)按鈕perform()執(zhí)行pause()暫停指定的時(shí)間,單位為秒下面演示使用Selenium實(shí)現(xiàn)單擊鼠標(biāo)左鍵、鼠標(biāo)指針懸停、鼠標(biāo)拖曳的功能。單擊鼠標(biāo)左鍵fromseleniumimportwebdriverfromselenium.webdriverimportActionChainsdriver=webdriver.Chrome()driver.get('/')driver.maximize_window()#定位到登錄按鈕對應(yīng)的元素element=driver.find_element_by_id('s-top-loginbtn')ActionChains(driver).click(on_element=element).perform()5.3.3鼠標(biāo)操作下面演示使用Selenium實(shí)現(xiàn)單擊鼠標(biāo)左鍵、鼠標(biāo)指針懸停、鼠標(biāo)拖曳的功能。fromselenium.webdriverimportActionChainsdriver=webdriver.Chrome()driver.get('/')#定位到JavaEE對應(yīng)的元素element=driver.find_element_by_class_name('a_gd')#將鼠標(biāo)移動(dòng)到指定的元素位置后懸停并執(zhí)行ActionChains(driver).move_to_element(element).perform()5.3.3鼠標(biāo)操作鼠標(biāo)指針懸停下面演示使用Selenium實(shí)現(xiàn)單擊鼠標(biāo)左鍵、鼠標(biāo)指針懸停、鼠標(biāo)拖曳的功能。鼠標(biāo)拖曳fromselenium.webdriverimportActionChainsimporttimedriver=webdriver.Chrome()driver.get(‘https://portal.fuyunfeng.top/plugins_v2/index.html#/slider-verify-example')#定位元素element=driver.find_element_by_xpath("http://div[@id='circle']")action=ActionChains(driver)#創(chuàng)建鼠標(biāo)移動(dòng)對象action.click_and_hold(element)#按住鼠標(biāo)左鍵action.drag_and_drop_by_offset(element,100,0)#向右拖曳100像素time.sleep(2)#等待2saction.perform()5.3.3鼠標(biāo)操作掌握如何操作下拉列表框,能夠通過Select類控制下拉列表框?qū)W習(xí)目標(biāo)5.3.4下拉列表框操作Selenium中,Select類專門用于處理下拉框,該類提供了以下幾個(gè)方法從下拉框中選擇選項(xiàng)或取消選項(xiàng)。5.3.4下拉列表框操作select_by_index():根據(jù)索引選擇下拉框中的選項(xiàng),且索引是從0開始的。select_by_value():根據(jù)值選擇下拉框中的選項(xiàng),這里的值是<option>元素中value屬性的值,而不是下拉框中選項(xiàng)的值。select_by_visible_text():根據(jù)文字選擇下拉框中的選項(xiàng),這里的文字是<option>元素的文本內(nèi)容。deselect_all():取消全部選擇。下面通過一個(gè)示例演示Selenium中Select類的使用,具體代碼如下所示。5.3.4下拉列表框操作fromseleniumimportwebdriverfromselenium.webdriver.support.uiimportSelectdriver=webdriver.Chrome()driver.get(‘C:/Users/sun/Desktop/下拉列表框.html')#找到下拉框元素element=driver.find_element_by_tag_name('select')select=Select(element)#選擇下拉框中第2個(gè)選項(xiàng)select.select_by_index(1) #根據(jù)索引選擇掌握如何操作彈出框,能夠通過Alert類控制彈出框?qū)W習(xí)目標(biāo)5.3.5彈出框處理Selenium中的Alert類用于處理這3類彈出框,不過在處理彈框之前需要先使用WebDriver類對象的switch_to.alert選中彈出框。5.3.5彈出框處理5.3.5彈出框處理要想處理警告框,Selenium的Alert類中提供了text屬性和accept()方法,其中text屬性用于獲取警告框中的警告消息;accept()方法用于單擊確定按鈕。fromseleniumimportwebdriverimporttimedriver=webdriver.Chrome()driver.get('C:/Users/admin/Desktop/警告框.html')element=driver.find_element_by_tag_name('button').click()alert=driver.switch_to.alert#選中警告框print(alert.text)#輸出警告框文本內(nèi)容time.sleep(1)#等待頁面加載alert.accept()#單擊確認(rèn)按鈕警告框5.3.5彈出框處理要想處理確認(rèn)框,Selenium的Alert類中提供了text屬性、accept()方法和dismiss()方法,其中text屬性和accept()方法與警告框中的作用相同,dismiss()方法用于單擊“取消”按鈕。driver.get('C:/Users/admin/Desktop/確認(rèn)框.html')element=driver.find_element_by_tag_name('button').click()alert=driver.switch_to.alert#選中確認(rèn)框time.sleep(1)#等待頁面加載alert.dismiss() #單擊取消按鈕確認(rèn)框5.3.5彈出框處理要想處理提示框,Selenium的Alert類中提供了text屬性、accept()方法、dismiss()方法和send_keys()方法,前三個(gè)屬性或方法的作用與確認(rèn)框中的作用相同,send_keys()方法用于接收用戶輸入的內(nèi)容。driver.get('C:/Users/admin/Desktop/提示框.html')element=driver.find_element_by_tag_name('button').click()alert=driver.switch_to.alert#選中提示框time.sleep(1) #等待頁面加載alert.send_keys('張三')#接收用戶輸入內(nèi)容alert.accept()#單擊確定按鈕提示框掌握如何切換頁面,能夠通過Selenium切換頁面學(xué)習(xí)目標(biāo)5.3.6頁面切換在瀏覽器中可以同時(shí)打開多個(gè)窗口,但每次只能顯示一個(gè)窗口的頁面。若希望顯示其他窗口的頁面,則需要單擊窗口上方的選項(xiàng)卡,達(dá)到頁面切換的效果。例如,在瀏覽器中同時(shí)打開兩個(gè)窗口,分別展示百度首頁和百度新聞頁面,當(dāng)前窗口展示的頁面為百度首頁。單擊百度新聞選項(xiàng)卡后,當(dāng)前窗口展示的頁面變?yōu)榘俣刃侣勴撁?.3.6頁面切換Selenium通過窗口句柄來區(qū)分瀏覽器的窗口,它為每個(gè)瀏覽器窗口分配了唯一句柄ID,通過這個(gè)句柄ID可以切換到指定的頁面。Selenium的WebDriver類中提供了一些操作窗口句柄的屬性或方法。5.3.6頁面切換window_handles:獲取所有窗口的句柄ID。current_window_handle:獲取當(dāng)前窗口的句柄ID。switch_to.window():跳轉(zhuǎn)到指定窗口。下面通過示例演示如何使用Selenium實(shí)現(xiàn)頁面切換,具體代碼如下所示。5.3.6頁面切換fromseleniumimportwebdriverimporttimedriver=webdriver.Chrome()driver.get('/')element=driver.find_element_by_link_text('新聞').click()print(f'當(dāng)前窗口句柄為:{driver.current_window_handle}')#獲取所有窗口的句柄IDprint(f'所有窗口句柄為:{driver.window_handles}')time.sleep(1)#跳轉(zhuǎn)到第一個(gè)窗口driver.switch_to.window(driver.window_handles[0])掌握頁面等待的使用,能夠使用隱式等待和顯示等待學(xué)習(xí)目標(biāo)5.3.7頁面等待Selenium提供了兩種實(shí)現(xiàn)頁面等待的方式,分別是隱式等待和顯式等待,其中隱式等待是等待特定的時(shí)間,顯式等待是指定某一條件,直到這個(gè)條件成立后才繼續(xù)執(zhí)行。5.3.7頁面等待implicitly_wait(self,time_to_wait)隱式等待是設(shè)置一個(gè)全局最大等待時(shí)間,單位為秒(s)。隱式等待可以使用WebDriver類的implicitly_wait()方法實(shí)現(xiàn),它使得WebDriver類的對象在定位元素時(shí),每隔一段特定的時(shí)間就會(huì)輪詢一次節(jié)點(diǎn)樹,直到元素被發(fā)現(xiàn)為止。

隱式等待5.3.7頁面等待implicitly_wait()方法中只包含一個(gè)參數(shù)time_to_wait,該參數(shù)表示等待的時(shí)長,單位為秒數(shù)。需要注意的是,隱式等待的時(shí)間一經(jīng)設(shè)置,這個(gè)設(shè)置就會(huì)在WebDriver類對象的整個(gè)生命周期起作用。fromseleniumimportwebdriverdriver=webdriver.Chrome()driver.get('/')#隱式等待,設(shè)置等待時(shí)間為10sdriver.implicitly_wait(10)#聊天框是一個(gè)frame,需要切換到framedriver.switch_to.frame('chatIframe')element=driver.find_element_by_class_name('service')print(element.text)下面通過一個(gè)示例演示如何通過隱式等待的方式獲取網(wǎng)頁中的數(shù)據(jù),具體代碼如下。

隱式等待5.3.7頁面等待WebDriverWait(driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None)顯式等待是設(shè)定等待條件并設(shè)置最長等待時(shí)間,如果超出等待時(shí)間還沒有找到元素,那么便會(huì)拋出異常,在Selenium中,webdriver.support.ui模塊的WebDriverWait類用于處理顯式等待。

顯式等待5.3.7頁面等待driver:WebDriver的驅(qū)動(dòng)程序。timeout:最長超時(shí)時(shí)間,默認(rèn)以秒為單位。poll_frequency:休眠的間隔時(shí)間,默認(rèn)為0.5秒。ignore_exceptions:超時(shí)后的異常信息,默認(rèn)情況下拋出NoSuchElementException異常。WebDriverWait類的對象通常和until()或until_not()方法配合使用,這兩個(gè)方法的作用相同,都用于在指定的時(shí)間內(nèi)調(diào)用WebDriver對象定位元素,直到返回值不為False為止。until()或until_not()方法有兩個(gè)參數(shù)method和message,其中參數(shù)method表示可調(diào)用的WebDriver對象;message表示設(shè)置的異常提示信息。

顯式等待5.3.7頁面等待fromseleniumimportwebdriverfromselenium.webdriver.support.uiimportWebDriverWaitdriver=webdriver.Chrome()driver.get('/')driver.switch_to.frame('chatIframe')element=WebDriverWait(driver,10).until(lambdax:x.find_element_by_class_name("service"))print(element.text)

顯式等待5.3.7頁面等待下面通過一個(gè)示例來演示通過顯式等待的方式獲取數(shù)據(jù)。多學(xué)一招在Selnium中,webdriver.support.expected_conditions模塊提供許多內(nèi)置等待條件,例如,判斷頁面元素是否加載到DOM中、元素是否可單擊、標(biāo)題內(nèi)容是否包含某內(nèi)容等。內(nèi)置等待條件多學(xué)一招內(nèi)置等待條件等待條件說明title_is判斷頁面標(biāo)題是否為預(yù)期標(biāo)題title_contains判斷頁面標(biāo)題是否包含預(yù)期內(nèi)容presence_of_element_located判斷元素是否被加載到DOM中,傳入定位元組,如(By.ID,"content")visibility_of_element_located判斷元素是否可見,傳入定位元組visibility_of判斷元素是否可見,傳入元素對象presence_of_all_elements_located判斷是否至少有一個(gè)元素加載到DOM中text_to_be_present_in_element判斷某個(gè)元素的text是否包含預(yù)期的內(nèi)容多學(xué)一招內(nèi)置等待條件等待條件說明text_to_be_present_in_element_value判斷某個(gè)元素的value屬性是否包含預(yù)期的內(nèi)容frame_to_be_available_and_switch_to_it判斷frame是否可切換invisibility_of_element_located判斷某個(gè)元素是否不在DOM中element_to_be_clickable判斷某個(gè)元素是否可見并且可以單擊staleness_of判斷某個(gè)元素是否仍在DOM中element_to_be_selected判斷某個(gè)元素是否被選中alert_is_present判斷頁面中是否存在警告多學(xué)一招內(nèi)置等待條件fromseleniumimportwebdriverfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfrommon.byimportBydriver=webdriver.Chrome()driver.get('/')driver.switch_to.frame('chatIframe')element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME,"service")))print(element.text)接下來,通過一個(gè)示例演示使用presence_of_element_located獲取數(shù)據(jù)。實(shí)踐項(xiàng)目:采集集信達(dá)平臺(tái)的短信服務(wù)日志信息5.4掌握集信達(dá)網(wǎng)站短信服務(wù)日志數(shù)據(jù)的采集,能夠使用Selenium定位元素并采集學(xué)習(xí)目標(biāo)5.4采集集信達(dá)的短信服務(wù)日志信息隨著企業(yè)業(yè)務(wù)擴(kuò)張、短信規(guī)?;褂茫瑐鹘y(tǒng)短信平臺(tái)的接入方式和單一的信息發(fā)送功能已不能滿足現(xiàn)代企業(yè)管理的需求。入口統(tǒng)一、對接成本較小、操作與維護(hù)簡單易行、穩(wěn)定性和可靠性的移動(dòng)信息化應(yīng)用成為短信平臺(tái)發(fā)展趨勢。集信達(dá)平臺(tái)就是融入這種趨勢的一個(gè)簡單易用的短信平臺(tái),能夠保證短信準(zhǔn)確且高效地發(fā)送。它提供多種對接方式,能夠滿足企業(yè)內(nèi)部的各種需求。接下來,本節(jié)將使用Selenium抓取集信達(dá)平臺(tái)上的短信服務(wù)日志信息。

項(xiàng)目需求5.4采集集信達(dá)的短信服務(wù)日志信息首先訪問集信達(dá)平臺(tái)的登錄頁面,此時(shí)可以使用平臺(tái)上默認(rèn)填寫的賬號(hào)密碼進(jìn)行登錄。

項(xiàng)目目標(biāo)5.4采集集信達(dá)的短信服務(wù)日志信息單擊登錄頁面中“登錄”按鈕進(jìn)入集信達(dá)平臺(tái)的項(xiàng)目課程簡介頁面,在該頁面中單擊“體驗(yàn)項(xiàng)目”按鈕進(jìn)入集信達(dá)平臺(tái)的首頁頁面。在集信達(dá)平臺(tái)的首頁頁面的左側(cè)菜單欄中選擇“短信服務(wù)”→“服務(wù)日志”,進(jìn)入短信服務(wù)日志頁面。

項(xiàng)目目標(biāo)5.4采集集信達(dá)的短信服務(wù)日志信息在短信服務(wù)日志頁面中可以通過設(shè)置簽名名稱、模板名稱、創(chuàng)建時(shí)間以及應(yīng)用名稱這4個(gè)篩選條件來搜索指定的數(shù)據(jù),設(shè)置搜索簽名名稱和應(yīng)用名稱為“黑馬頭條”,此時(shí)單擊“搜索”按鈕后搜索到的數(shù)據(jù)。

項(xiàng)目目標(biāo)5.4采集集信達(dá)的短信服務(wù)日志信息頁面上的日志信息為需要采集的數(shù)據(jù)(1)登錄集信達(dá)平臺(tái)在瀏覽器中訪問集信達(dá)平臺(tái),首先會(huì)看到該平臺(tái)的登錄頁面。由于登錄頁面中的賬號(hào)與密碼是默認(rèn)顯示的,無須用戶手動(dòng)輸入,所以我們只需要通過XPath的路徑表達(dá)式定位到“登錄”按鈕對應(yīng)的標(biāo)簽,再使用Selenium執(zhí)行單擊“登錄”按鈕的操作,即可進(jìn)入集信達(dá)平臺(tái)的項(xiàng)目課程簡介頁面。

項(xiàng)目分析5.4采集集信達(dá)的短信服務(wù)日志信息(2)單擊體驗(yàn)項(xiàng)目在集信達(dá)平臺(tái)的項(xiàng)目課程簡介頁面單擊“體驗(yàn)項(xiàng)目”按鈕即可進(jìn)入集信達(dá)平臺(tái)的首頁頁面。通過Xpath的路徑表達(dá)式定位到體驗(yàn)項(xiàng)目按鈕對應(yīng)的標(biāo)簽,然后再使用Se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論