引入php
今日概要css
知識點回顧html
今日詳情python
動態數據加載處理jquery
一.圖片懶加載web
- 運行結果觀察發現,咱們能夠獲取圖片的名稱,可是連接獲取的爲空,檢查後發現xpath表達式也沒有問題,究其緣由出在了哪裏呢?正則表達式
圖片懶加載概念:chrome
圖片懶加載是一種網頁優化技術。圖片做爲一種網絡資源,在被請求時也與普通靜態資源同樣,將佔用網絡資源,而一次性將整個頁面的全部圖片加載完,將大大增長頁面的首屏加載時間。爲了解決這種問題,經過先後端配合,使圖片僅在瀏覽器當前視窗內出現時才加載該圖片,達到減小首屏圖片請求數的技術就被稱爲「圖片懶加載」。windows
網站通常如何實現圖片懶加載技術呢?後端
在網頁源碼中,在img標籤中首先會使用一個「僞屬性」(一般使用src2,original......)去存放真正的圖片連接而並不是是直接存放在src屬性中。當圖片出現到頁面的可視化區域中,會動態將僞屬性替換成src屬性,完成圖片的加載。
站長素材案例後續分析:經過細緻觀察頁面的結構後發現,網頁中圖片的連接是存儲在了src2這個僞屬性中
selenium最初是一個自動化測試工具,而爬蟲中使用它主要是爲了解決requests沒法直接執行JavaScript代碼的問題 selenium本質是經過驅動瀏覽器,徹底模擬瀏覽器的操做,好比跳轉、輸入、點擊、下拉等,來拿到網頁渲染以後的結果,可支持多種瀏覽器
Selenium支持很是多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機端的瀏覽器。另外,也支持無界面瀏覽器PhantomJS。
webdriver 提供了一系列的元素定位方法,經常使用的有如下幾種:
注意
一、find_element_by_xxx找的是第一個符合條件的標籤,find_elements_by_xxx找的是全部符合條件的標籤。
二、根據ID、CSS選擇器和XPath獲取,它們返回的結果徹底一致。
三、另外,Selenium還提供了通用方法find_element()
,它須要傳入兩個參數:查找方式By
和值。實際上,它就是find_element_by_id()
這種方法的通用函數版本,好比find_element_by_id(id)
就等價於find_element(By.ID, id)
,兩者獲得的結果徹底一致。
Selenium能夠驅動瀏覽器來執行一些操做,也就是說可讓瀏覽器模擬執行一些動做。比較常見的用法有:輸入文字時用send_keys()
方法,清空文字時用clear()
方法,點擊按鈕時用click()
方法。示例以下:
在上面的實例中,一些交互動做都是針對某個節點執行的。好比,對於輸入框,咱們就調用它的輸入文字和清空文字方法;對於按鈕,就調用它的點擊方法。其實,還有另一些操做,它們沒有特定的執行對象,好比鼠標拖曳、鍵盤按鍵等,這些動做用另外一種方式來執行,那就是動做鏈。
好比,如今實現一個節點的拖曳操做,將某個節點從一處拖曳到另一處,能夠這樣實現:
對於某些操做,Selenium API並無提供。好比,下拉進度條,它能夠直接模擬運行JavaScript,此時使用execute_script()
方法便可實現,代碼以下:
經過page_source
屬性能夠獲取網頁的源代碼,接着就可使用解析庫(如正則表達式、Beautiful Soup、pyquery等)來提取信息了。
使用Selenium,還能夠方便地對Cookies進行操做,例如獲取、添加、刪除Cookies等。示例以下:
PhantomJS是一款無界面的瀏覽器,其自動化操做流程和上述操做谷歌瀏覽器是一致的。因爲是無界面的,爲了可以展現自動化操做流程,PhantomJS爲用戶提供了一個截屏的功能,使用save_screenshot函數實現。
因爲PhantomJs最近已經中止了更新和維護,因此推薦你們可使用谷歌的無頭瀏覽器,是一款無界面的谷歌瀏覽器。
如今很多大網站有對selenium採起了監測機制。好比正常狀況下咱們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值爲
undefined。而使用selenium訪問則該值爲true。那麼如何解決這個問題呢?
只須要設置Chromedriver的啓動參數便可解決問題。在啓動Chromedriver以前,爲Chrome開啓實驗性功能參數excludeSwitches
,它的值爲['enable-automation']
,完整代碼以下:
做業