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

selenium動態(tài)數(shù)據(jù)獲取的方法實現(xiàn)

 更新時間:2022年07月10日 11:20:21   作者:顏語凌  
本文主要介紹了selenium動態(tài)數(shù)據(jù)獲取的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Selenium 是一個自動化測試工具,利用它可以驅(qū)動瀏覽器執(zhí)行特定的動作,如點擊、下拉等操作,同時還可以獲取瀏覽器當前呈現(xiàn)的頁面的源代碼,做到可見即可獲取。對于一些 JavaScript 動態(tài)渲染的頁面來說,此種抓取方式非常有效。接下來,就讓我們來感受一下它的強大之處吧。  

??webdriver的安裝 

??selenium安裝

 首先,我們使用selenium進行測試,所以我們得安裝selenium庫。

pip install selenium

 ??驅(qū)動安裝

webdriver 是瀏覽器對應的驅(qū)動,我們使用的的瀏覽器有三種谷歌Chrome、微軟Microsoft Edge、還有一個火狐Firefox,但是我們經(jīng)常使用谷歌Chrome瀏覽器進行測試?,F(xiàn)在我們就以Chrome瀏覽器為例下載它對應的chromedriver 。

 官網(wǎng)http://chromedriver.storage.googleapis.com/index.html

注意:

我們下載chromedriver 驅(qū)動時,我們要查明瀏覽器的版本,要對應相應的版本號進行下載,否則會報錯。禁止Google瀏覽器更新服務,可以上網(wǎng)查教程。

??基本使用 

??查找節(jié)點 

Selenium 可以驅(qū)動瀏覽器完成各種操作,比如填充表單、模擬點擊等。比如,我們想要完成向某個輸入框輸入文字的操作,總需要知道這個輸入框在哪里吧?而 Selenium 提供了一系列查找節(jié)點的方法,我們可以用這些方法來獲取想要的節(jié)點,以便下一步執(zhí)行一些動作或者提取信息。  

獲取節(jié)點的方法:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text?? ??? ??? ??? ?專門用來定位超鏈接文本(標簽) ?全匹配
find_element_by_partial_link_text ? ? ??? ? 模糊匹配
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector?

 給個示例

from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('Python')
browser.find_element_by_id('su').click()
# 提取頁面
print(browser.page_source.encode('utf-8'))
# 提取cookie
print(browser.get_cookies())
# 提取當前請求地址
print(browser.current_url)
browser.close()

運行代碼后發(fā)現(xiàn),會自動彈出一個 Chrome 瀏覽器。瀏覽器首先會跳轉(zhuǎn)到百度,然后在搜索框中輸入 Python,接著跳轉(zhuǎn)到搜索結(jié)果頁  

注:當我們的chromedriver驅(qū)動沒有放置到Chrome瀏覽器路徑時,我們可以使用以下來申明瀏覽器對象。

browser = webdriver.Chrome(executable_path="chromedriver安裝路徑")

方法總結(jié):

  • brower.get(url):跳轉(zhuǎn)當前url鏈接。
  • browser.find_element_by_id('id屬性值'):定位到id屬性值。
  • send_keys('輸入關(guān)鍵字'):定位到輸入框后輸入。
  • find_element_by_id('id屬性值').click():定位到id屬性值后點擊。
  • browser.page_source.encode('utf-8'):獲取當前頁面的源碼。
  • browser.get_cookies():提取cookies。
  • browser.current_url:獲取當前頁面的url。
  • brower.close():關(guān)閉瀏覽器。

??執(zhí)行 JavaScript

對于某些操作,Selenium API 并沒有提供。比如,下拉進度條,它可以直接模擬運行 JavaScript,此時使用 execute_script() 方法即可實現(xiàn),代碼如下:

# document.body.scrollHeight 獲取頁面高度
 
from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://36kr.com/')
# 下拉邊框  一次性下拉
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
 
# 慢慢的下拉
for i in range(1,9):
    time.sleep(random.randint(100, 300) / 1000)
    browser.execute_script('window.scrollTo(0,{})'.format(i * 700))

這里就利用 execute_script() 方法將進度條下拉到最底部。為了模擬人為活動,我們調(diào)節(jié)了下拉的緩沖時間。

我們使用瀏覽器的控制臺輸入以下代碼也能運行。

window.scrollTo(0, document.body.scrollHeight) 

圖例:

??切換 Frame

我們知道網(wǎng)頁中有一種節(jié)點叫作 iframe,也就是子 Frame,相當于頁面的子頁面,它的結(jié)構(gòu)和外部網(wǎng)頁的結(jié)構(gòu)完全一致。Selenium 打開頁面后,它默認是在父級 Frame 里面操作,而此時如果頁面中還有子 Frame,它是不能獲取到子 Frame 里面的節(jié)點的。這時就需要使用 switch_to.frame() 方法來切換 Frame。示例如下:  

browser.get('https://www.douban.com/')
login_iframe = browser.find_element_by_xpath('//div[@class="login"]/iframe')
browser.switch_to.frame(login_iframe)
browser.find_element_by_class_name('account-tab-account').click()
browser.find_element_by_id('username').send_keys('123123123')

首先我們要定位到iframe,然后用switch_to.frame() 方法來切換 Frame,這時我們就可以定位到子 Frame進行有關(guān)操作了。

??前進后退

平常使用瀏覽器時都有前進和后退功能,Selenium 也可以完成這個操作,它使用 back() 方法后退,使用 forward() 方法前進。示例如下: 

import time
from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://www.baidu.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.python.org/')
browser.back()
time.sleep(1)
browser.forward()
browser.close()

這里我們連續(xù)訪問 3 個頁面,然后調(diào)用 back() 方法回到第二個頁面,接下來再調(diào)用 forward() 方法又可以前進到第三個頁面。  

??選項卡管理

在訪問網(wǎng)頁的時候,會開啟一個個選項卡。在 Selenium 中,我們也可以對選項卡進行操作。示例如下:

import time
from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get('https://python.org')

這里我們先跳轉(zhuǎn)到百度再打開一個空白選項卡打印選項卡編號,再跳轉(zhuǎn)到第二個選項卡也就是這個空白選項卡打開淘寶,休息一秒,再跳轉(zhuǎn)到第一個選項卡打開python官網(wǎng)。

??配置操作

 selenium有很多配置,下面我舉幾個常見的。

options = webdriver.ChromeOptions()

# 無頭模式
option.add_argument("-headless")

#設置代理
options.add_argument('proxy-server=' +'192.168.0.28:808')

#將瀏覽器最大化顯示
browser.maximize_window() 

# 設置寬高
browser.set_window_size(480, 800)
# 通過js新打開一個窗口
driver.execute_script('window.open("https://www.baidu.com");')

browser = webdriver.Chrome(chrome_options=options)

?繞過檢測

繞過檢測對于一些網(wǎng)站的自動化反爬很管用。 

# 設置屏蔽
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
browsers = webdriver.Chrome(chrome_options=options)
browsers.get('https://bot.sannysoft.com/')

這里我們使用下面這個網(wǎng)站進行自動化檢測

網(wǎng)站:https://bot.sannysoft.com/

我們沒設置繞過檢測

我們設置了繞過檢測后

到此這篇關(guān)于selenium動態(tài)數(shù)據(jù)獲取的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)selenium動態(tài)數(shù)據(jù)獲取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 實現(xiàn)python?namedtuple元類編程

    實現(xiàn)python?namedtuple元類編程

    這篇文章主要為大家介紹了實現(xiàn)python?namedtuple元類編程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • pytorch 實現(xiàn)計算 kl散度 F.kl_div()

    pytorch 實現(xiàn)計算 kl散度 F.kl_div()

    這篇文章主要介紹了pytorch 實現(xiàn)計算 kl散度 F.kl_div(),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • 一些Python?5行代碼的神奇操作匯總

    一些Python?5行代碼的神奇操作匯總

    最開始學習?Python,不需要太過復雜,下面這篇文章主要給大家介紹了關(guān)于Python?5行代碼的神奇操作,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 解決項目pycharm能運行,在終端卻無法運行的問題

    解決項目pycharm能運行,在終端卻無法運行的問題

    今天小編就為大家分享一篇解決項目pycharm能運行,在終端卻無法運行的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python爬取哈爾濱天氣信息

    python爬取哈爾濱天氣信息

    這篇文章主要為大家詳細介紹了python爬蟲抓取哈爾濱天氣信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python?生成多行重復數(shù)據(jù)的方法實現(xiàn)

    Python?生成多行重復數(shù)據(jù)的方法實現(xiàn)

    本文主要介紹了Python?生成多行重復數(shù)據(jù)的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Python交換變量

    Python交換變量

    Python美味第一頓,來個方便快捷的變量交換!為什么是Python?!因為Python中交換變量不需要臨時變量!
    2008-09-09
  • python 實現(xiàn)堆排序算法代碼

    python 實現(xiàn)堆排序算法代碼

    python 實現(xiàn)堆排序算法代碼,需要的朋友可以參考下
    2012-06-06
  • Python中json常見四種用法舉例

    Python中json常見四種用法舉例

    這篇文章主要給大家介紹了關(guān)于Python中json常見四種用法舉例的相關(guān)資料,眾所周知JSON是一種輕量級的數(shù)據(jù)交換格式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • python實現(xiàn)智能語音天氣預報

    python實現(xiàn)智能語音天氣預報

    今天小編就為大家分享一篇python實現(xiàn)智能語音天氣預報,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論