最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 爬蟲之selenium可視化爬蟲的實現(xiàn)

 更新時間:2020年12月04日 09:47:38   作者:詭途  
這篇文章主要介紹了python 爬蟲之selenium可視化爬蟲的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

之所以把selenium爬蟲稱之為可視化爬蟲

主要是相較于前面所提到的幾種網(wǎng)頁解析的爬蟲方式

selenium爬蟲主要是模擬人的點擊操作

selenium驅(qū)動瀏覽器并進行操作的過程是可以觀察到的

就類似于你在看著別人在幫你操縱你的電腦,類似于別人遠程使用你的電腦

當然了,selenium也有無界面模式

快速入門

selenium基本介紹:

selenium 是一套完整的web應(yīng)用程序測試系統(tǒng),

包含了測試的錄制(selenium IDE),編寫及運行(Selenium Remote Control)
和測試的并行處理(Selenium Grid)。

Selenium的核心Selenium Core基于JsUnit,
完全由JavaScript編寫,因此可以用于任何支持JavaScript的瀏覽器上。
selenium可以模擬真實瀏覽器,自動化測試工具,支持多種瀏覽器,

爬蟲中主要用來解決JavaScript渲染問題。

用python寫爬蟲的時候,主要用的是selenium的Webdriver,

#安裝selenium庫
pip install selenium
#安裝對應(yīng)瀏覽器驅(qū)動
# 我們可以通過下面的方式先看看Selenium.Webdriver支持哪些瀏覽器
from selenium import webdriver
print(help(webdriver))
適用瀏覽器:
PACKAGE CONTENTS
  android (package)  blackberry (package)  chrome (package)
  common (package)   edge (package)     firefox (package)
  ie (package)     opera (package)     phantomjs (package)
  remote (package)   safari (package)    support (package)  webkitgtk (package)
#這里要說一下比較重要的PhantomJS,
#PhantomJS是一個而基于WebKit的服務(wù)端JavaScript API,
#支持Web而不需要瀏覽器支持,
#其快速、原生支持各種Web標準:Dom處理,CSS選擇器,JSON等等。
#PhantomJS可以用用于頁面自動化、網(wǎng)絡(luò)監(jiān)測、網(wǎng)頁截屏,以及無界面測試

谷歌瀏覽器驅(qū)動下載地址
注意對應(yīng)版本號,chrome地址欄輸入chrome://version/ 查看自己的Chrome版本
我使用的是anaconda 下載好后丟入anaconda3\Scripts文件夾下就可以了
如果是其他ide如:pycharm、VScode但加載的還是anaconda的集成python,依然可以這么操作

簡單測試

from selenium import webdriver
# #聲明瀏覽器對象
browser1 = webdriver.Chrome()
browser2 = webdriver.Firefox()
# #訪問頁面
browser1.get("http://www.baidu.com")
print(browser1.page_source)
#關(guān)閉當前窗口
browser1.close()

元素定位

要想對頁面進行操作,首先要做的是選中頁面元素,
比較常見的八種元素定位方式,如下表

定位一個元素 定位多個元素 定位方式描述
find_element_by_id find_elements_by_id 通過元素 id進行定位
find_element_by_name find_elements_by_name 通過元素 名稱進行定位
find_element_by_xpath find_elements_by_xpath 通過xpath路徑進行定位
find_element_by_link_text find_elements_by_link_text 通過完整超鏈接文本進行定位
find_element_by_partial_link_text find_elements_by_partial_link_text 通過部分超鏈接文本進行定位
find_element_by_tag_name find_elements_by_tag_name 通過標記名稱進行定位
find_element_by_class_name find_elements_by_class_name 通過類名稱進行定位
find_element_by_css_selector find_elements_by_css_selector 通過css選擇器進行定位

更詳細定位方式可以參考:《史上最全!Selenium元素定位的30種方式

頁面操作

1.表單填充

# 找到用戶名輸入用戶名
user = drive.find_element_by_name("LoginForm[username]")
user.send_keys(username)
# 找到密碼輸入密碼
pwd=drive.find_element_by_id("LoginForm_password")
pwd.send_keys(password)
# 點擊登錄按鈕實現(xiàn)登錄
drive.find_element_by_class_name("login_btn").click()

2.窗口句柄

簡單講,句柄就是瀏覽器上方每一個窗口欄的唯一標識

在這里插入圖片描述

#獲取當前窗口所有句柄
handles = drive.window_handles
#通過句柄 切換到第2個標簽頁
drive.switch_to.window(handles[2])
"""操作完成"""
#關(guān)閉當前窗口
driver.close() 
#通過句柄 切換到第1個標簽頁
drive.switch_to.window(handles[0])
time.sleep(random.uniform(2,3))

3.url加載和獲取

#url加載
drive.get(url)
# 獲取當前頁面url并斷言
currentPageUrl = driver.current_url

4.cookie處理

  • get_cookies:獲取cookie信息
  • add_cookie:添加cookie信息
drive.get("http://www.baidu.com")
cookie = {'name':'foo','value':'bar'}
drive.add_cookie(cookie)
drive.get_cookies()

等待方式

現(xiàn)在很多網(wǎng)站采用 Ajax技術(shù)
無法確定網(wǎng)頁元素什么時候能被完全加載
所以網(wǎng)頁元素的選取比較困難
此時就需要設(shè)置等待(等待網(wǎng)頁加載完成)

selenium有兩種等待方式:

  • 顯式等待
  • 隱式等待

1.顯式等待
顯式等待是一種條件觸發(fā)式等待
直到設(shè)置的某一條件達成時才會繼續(xù)執(zhí)行
可以設(shè)置超時時間,如果超過超時時間元素依然沒被加載,就會拋出異常

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
drive = webdriver.Chrome()
url = 'http://www.baidu.com/'
drive.get(url)

try:
	WebDriverWait(self.driver,10).until(EC.presence_of_element_located(By.ID,"LoginForm[username]")) #顯示等待
except:
 print('%s頁面未找到元素'% loc)

以上代碼加載 'http://www.baidu.com/'頁面
并定位id為"LoginForm[username]"的元素
設(shè)置超時時間10秒,webDriverWait默認會500ms檢測一下元素是否存在

selenium提供了一些內(nèi)置的用于顯示等待的方法,
位于expected_conditions類中,詳細見下表

內(nèi)置方法 功能
title_is 判斷當前頁面的title是否等于預(yù)期內(nèi)容
title_contains 判斷當前頁面的title是否包含預(yù)期字符串
presence_of_element_located 判斷某個元素是否被加到了dom樹里,
并不代表該元素一定可見
presence_of_all_element_located 判斷是否至少有1個元素存在于dom樹里
visibility_of_element_located 判斷某個元素是否可見
visibility_of 判斷某個元素是否可見
invisibility_of_element_located 判斷某個元素是否不存在于dom樹里或不可見
text_to_be_present_in_element 判斷元素中的text是否包含了預(yù)期的字符串
text_to_be_present_in_element_value 判斷元素中的value屬性是否包含了預(yù)期字符
frame_to_be_available_and_switch_to_it 判斷該frame是否可以切換進去,如果可以,
返回True并切換進去,否則返回False
element_to_be_clickable 判斷某個元素是否可見并且是enable的
staleness_of 等待某個元素從dom樹中移除
element_to_be_selected 判斷某個元素是否被選中了,一般用于下拉列表
element_located_to_be_selected 判斷某個元素是否被選中了,一般用于下拉列表
element_selection_state_to_be 判斷某個元素的選中狀態(tài)是否符合預(yù)期
element_located_selection_state_to_be 判斷某個元素的選中狀態(tài)是否符合預(yù)期
alert_is_present 判斷頁面上是否存在alert框

2.隱式等待

隱式等待是在嘗試定位某個元素時,如果沒能立刻發(fā)現(xiàn),就等待固定時長
類似于socket超時,默認設(shè)置是0秒,即相當于最長等待時長

在瀏覽器界面直觀感受是:
等待直到網(wǎng)頁加載完成(地址欄這個地方不是× 變成如下)時繼續(xù)執(zhí)行,
網(wǎng)頁加載超過設(shè)置等待時長才報錯

在這里插入圖片描述

使用方法

from selenium import webdriver
drive = webdriver.Chrome()
url = 'http://www.baidu.com/'
#設(shè)置最大等待時長 10秒
drive.implicitly_wait(10)
drive.get(url)
user = drive.find_element_by_name("LoginForm[username]")

3.線程休眠
time.sleep(time)是比較常用的線程休眠方式
為了避免風(fēng)險,我個人比較喜歡隨機休眠
time.sleep(random.uniform(4,5))

擴展程序加載

# 設(shè)置好應(yīng)用擴展
chrome_options.add_extension(extension_path)
#添加下載路徑
#download.default_directory:設(shè)置下載路徑  profile.default_content_settings.popups:設(shè)置為 0 禁止彈出窗口
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory':tmp_path}
chrome_options.add_experimental_option('prefs', prefs)

到此這篇關(guān)于python 爬蟲之selenium可視化爬蟲的實現(xiàn)的文章就介紹到這了,更多相關(guān)selenium可視化爬蟲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Python+Matplotlib實現(xiàn)直方圖的繪制

    基于Python+Matplotlib實現(xiàn)直方圖的繪制

    Matplotlib是Python的繪圖庫,它能讓使用者很輕松地將數(shù)據(jù)圖形化,并且提供多樣化的輸出格式。本文將為大家介紹如何用matplotlib繪制直方圖,感興趣的朋友可以學(xué)習(xí)一下
    2022-04-04
  • Python實現(xiàn)基于二叉樹存儲結(jié)構(gòu)的堆排序算法示例

    Python實現(xiàn)基于二叉樹存儲結(jié)構(gòu)的堆排序算法示例

    這篇文章主要介紹了Python實現(xiàn)基于二叉樹存儲結(jié)構(gòu)的堆排序算法,結(jié)合實例形式分析了Python二叉樹的定義、遍歷及堆排序算法相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • python 高效去重復(fù) 支持GB級別大文件的示例代碼

    python 高效去重復(fù) 支持GB級別大文件的示例代碼

    今天小編就為大家分享一篇python 高效去重復(fù) 支持GB級別大文件的示例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python中必要的名詞解釋

    python中必要的名詞解釋

    在本篇文章里小編給大家整理的是關(guān)于python中必要的名詞解釋以及相關(guān)知識點,有興趣的朋友們學(xué)習(xí)下。
    2019-11-11
  • python fabric使用筆記

    python fabric使用筆記

    這篇文章主要介紹了python fabric使用筆記,fabric是一款實現(xiàn)遠程操作和部署強大工具,本文就給出了它的多個使用實例,需要的朋友可以參考下
    2015-05-05
  • Python數(shù)據(jù)類型相互轉(zhuǎn)換

    Python數(shù)據(jù)類型相互轉(zhuǎn)換

    當涉及數(shù)據(jù)類型轉(zhuǎn)換時,Python提供了多種內(nèi)置函數(shù)來執(zhí)行不同類型之間的轉(zhuǎn)換,本文主要介紹了Python數(shù)據(jù)類型相互轉(zhuǎn)換,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • 詳解Python中的__getitem__方法與slice對象的切片操作

    詳解Python中的__getitem__方法與slice對象的切片操作

    Python中想要使類的實例像list一樣使用下標,可以用__getitem__方法,而配合slice對象則可以實現(xiàn)list一樣的切片,詳解Python中的__getitem__方法與slice對象的切片操作
    2016-06-06
  • Pandas庫中dataframe.corr()函數(shù)的使用

    Pandas庫中dataframe.corr()函數(shù)的使用

    dataframe.corr()是Pandas庫中的一個函數(shù),用于計算DataFrame中各列之間的相關(guān)系數(shù),本文主要介紹了Pandas庫中dataframe.corr()函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Matplotlib自定義坐標刻度的使用示例

    Matplotlib自定義坐標刻度的使用示例

    雖然matplotlib默認的坐標軸定位器與格式生成器可以滿足大部分需求,但是并非對每一幅圖都合適,本文主要介紹了Matplotlib自定義坐標刻度的使用示例,感興趣的可以了解一下
    2023-11-11
  • Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù)

    Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù)

    這篇文章主要介紹了Python如何讀取txt文件,獲取指定行中指定位置數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評論

镇宁| 宜宾市| 三门峡市| 夹江县| 株洲县| 疏附县| 潮州市| 和林格尔县| 黑水县| 兴隆县| 东阿县| 剑阁县| 民丰县| 大兴区| 北流市| 康定县| 安新县| 平邑县| 东乡| 桂东县| 剑河县| 喀喇沁旗| 海丰县| 稻城县| 富民县| 平舆县| 项城市| 兖州市| 东莞市| 铁力市| 西贡区| 镇雄县| 九龙坡区| 新建县| 沙田区| 湖口县| 莎车县| 雷山县| 鄱阳县| 新和县| 卫辉市|