欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

selenium爬蟲主要是模擬人的點(diǎn)擊操作

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

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

當(dāng)然了,selenium也有無界面模式

快速入門

selenium基本介紹:

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

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

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

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

用python寫爬蟲的時(shí)候,主要用的是selenium的Webdriver,

#安裝selenium庫
pip install selenium
#安裝對(duì)應(yīng)瀏覽器驅(qū)動(dòng)
# 我們可以通過下面的方式先看看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是一個(gè)而基于WebKit的服務(wù)端JavaScript API,
#支持Web而不需要瀏覽器支持,
#其快速、原生支持各種Web標(biāo)準(zhǔn):Dom處理,CSS選擇器,JSON等等。
#PhantomJS可以用用于頁面自動(dòng)化、網(wǎng)絡(luò)監(jiān)測(cè)、網(wǎng)頁截屏,以及無界面測(cè)試

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

簡單測(cè)試

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

元素定位

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

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

更詳細(xì)定位方式可以參考:《史上最全!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)
# 點(diǎn)擊登錄按鈕實(shí)現(xiàn)登錄
drive.find_element_by_class_name("login_btn").click()

2.窗口句柄

簡單講,句柄就是瀏覽器上方每一個(gè)窗口欄的唯一標(biāo)識(shí)

在這里插入圖片描述

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

3.url加載和獲取

#url加載
drive.get(url)
# 獲取當(dāng)前頁面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)頁元素什么時(shí)候能被完全加載
所以網(wǎng)頁元素的選取比較困難
此時(shí)就需要設(shè)置等待(等待網(wǎng)頁加載完成)

selenium有兩種等待方式:

  • 顯式等待
  • 隱式等待

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

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è)置超時(shí)時(shí)間10秒,webDriverWait默認(rèn)會(huì)500ms檢測(cè)一下元素是否存在

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

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

2.隱式等待

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

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

在這里插入圖片描述

使用方法

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

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

擴(kuò)展程序加載

# 設(shè)置好應(yīng)用擴(kuò)展
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可視化爬蟲的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)selenium可視化爬蟲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論