python爬蟲之selenium知識點記錄

selenium

一、前期準備

1、概述

selenium本身是一個自動化測試工具。它可以讓python代碼調用瀏覽器。并獲取到瀏覽器中加載的各種資源。 我們可以利用selenium提供的各項功能。 幫助我們完成數據的抓取。

2、學習目標

  1. 掌握 selenium發送請求,加載網頁的方法

  2. 掌握 selenium簡單的元素定位的方法

  3. 掌握 selenium的基礎屬性和方法

  4. 掌握 selenium退出的方法

3、安裝

安裝:pip install selenium

它與其他庫不同的地方是他要啟動你電腦上的瀏覽器, 這就需要一個驅動程序來輔助.

這里推薦用chrome瀏覽器

chrome驅動地址:http://chromedriver.storage.googleapis.com/index.html

?

根據你電腦的不同自行選擇吧. win64選win32即可.

然后關鍵的來了. 把你下載的瀏覽器驅動放在python解釋器所在的文件夾

Windwos: py -0p 查看Python路徑

Mac: open + 路徑

例如:open /usr/local/bin/

前期準備工作完畢. 上代碼看看 感受一下selenium

from selenium.webdriver import Chrome ?# 導入谷歌瀏覽器的類
?
?
# 創建瀏覽器對象
web = Chrome() ?# 如果你的瀏覽器驅動放在了解釋器文件夾
?
web.get("http://www.baidu.com") ?# 輸入網址
print(web.title) ?# 打印title

運行一下你會發現神奇的事情發生了. 瀏覽器自動打開了. 并且輸入了網址. 也能拿到網頁上的title標題.

二、selenium的基本使用

1、加載網頁:

selenium通過控制瀏覽器,所以對應的獲取的數據都是elements中的內容

from selenium import webdriver
from selenium.webdriver.common.by import By
?
driver = webdriver.Chrome()
# 訪問百度
driver.get("http://www.baidu.com/")
# 截圖
driver.save_screenshot("baidu.png")

2、定位和操作:

# 搜索關鍵字 杜卡迪
driver.find_element(By.ID, "kw").send_keys("杜卡迪")
# 點擊id為su的搜索按鈕
driver.find_element(By.ID, "su").click()

3、查看請求信息:

driver.page_source ? # 獲取頁面內容
driver.get_cookies()
driver.current_url

4、退出

driver.close() ?# 退出當前頁面
driver.quit() ? # 退出瀏覽器

小結

  1. selenium的導包:from selenium import webdriver

  2. selenium創建driver對象:webdriver.Chrome()

  3. selenium請求數據:driver.get("http://www.baidu.com/")

  4. selenium查看數據: driver.page_source

  5. 關閉瀏覽器: driver.quit()

  6. 根據id定位元素: driver.find_element_by_id("kw")/driver.find_element(By.ID, "kw")

  7. 操作點擊事件: click()

  8. 給輸入框賦值:send_keys()

三、元素定位的方法

學習目標

  1. 掌握 selenium定位元素的方法

  2. 掌握 selenium從元素中獲取文本和屬性的方法

通過selenium的基本使用可以簡單定位元素和獲取對應的數據,接下來我們再來學習下 定位元素的其他方法

1、selenium的定位操作

  1. 元素定位的兩種寫法:

    • 直接調用型

       el = driver.find_element_by_xxx(value)# xxx是定位方式,后面我們會講,value為該方式對應的值
    • 使用By類型(需要導入By) 建議使用這種方式

       # 直接掉用的方式會在底層翻譯成這種方式
      from selenium.webdriver.common.by import By
      driver.find_element(By.xxx,value)
  2. 元素定位的兩種方式:

    • 精確定位一個元素,返回結果為一個element對象,定位不到則報錯

      driver.find_element(By.xx, value) ?# 建議使用
      driver.find_element_by_xxx(value)
    • 定位一組元素,返回結果為element對象列表,定位不到返回空列表

      driver.find_elements(By.xx, value) ?# 建議使用
      driver.find_elements_by_xxx(value)
  3. 元素定位的八種方法:

    以下方法在element之后添加s就變成能夠獲取一組元素的方法

    • By.ID 使用id值定位

      el = driver.find_element(By.ID, '')
      el = driver.find_element_by_id() ? 
    • By.XPATH 使用xpath定位

      el = driver.find_element(By.XPATH, '')
      el = driver.find_element_by_xpath() ? ? ? 
    • By.TAG_NAME. 使用標簽名定位

      el = driver.find_element(By.TAG_NAME, '')
      el = driver.find_element_by_tag_name() ? ?
    • By.LINK_TEXT使用超鏈接文本定位

      el = driver.find_element(By.LINK_TEXT, '')
      el = driver.find_element_by_link_text() 
    • By.PARTIAL_LINK_TEXT 使用部分超鏈接文本定位

      el = driver.find_element(By.PARTIAL_LINK_TEXT  , '')
      el = driver.find_element_by_partial_link_text()
    • By.NAME 使用name屬性值定位

      el = driver.find_element(By.NAME, '')
      el = driver.find_element_by_name()
    • By.CLASS_NAME 使用class屬性值定位

      el = driver.find_element(By.CLASS_NAME, '') ? 
      el = driver.find_element_by_class_name()
    • By.CSS_SELECTOR 使用css選擇器定位

      el = driver.find_element(By.CSS_SELECTOR, '') ?
      el = driver.find_element_by_css_selector()

注意:

  • 建議使用find_element/find_elements

  • find_elementfind_elements的區別

  • by_link_textby_partial_link_text的區別: 全部文本和包含某個文本

  • 使用: 以豆瓣為例

    import time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    ?
    driver = webdriver.Chrome()
    driver.implicitly_wait(10) ?# 等待節點加載完成
    driver.get("https://www.douban.com/search?q=%E6%9D%B0%E6%A3%AE%E6%96%AF%E5%9D%A6%E6%A3%AE")
    time.sleep(2)
    # 使用id的方式獲取右上角的搜索框
    # ret1 = driver.find_element(By.ID, 'inp-query')
    # ret1 = driver.find_element(By.ID, 'inp-query').send_keys("杰森斯坦森")
    # ret1 = driver.find_element_by_id("inp-query")
    # print(ret1)
    ?
    # 輸出為:<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")>
    ?
    # 搜索輸入框  使用find_elements進行獲取
    # ret2 = driver.find_elements(By.ID, "inp-query")
    # ret2 = driver.find_elements_by_id("inp-query")
    # print(ret2)
    #輸出為:[<selenium.webdriver.remote.webelement.WebElement (session="ea6f94544ac3a56585b2638d352e97f3", element="0.5335773935305805-1")>]
    ?
    # 搜索按鈕  使用xpath進行獲取
    # ret3 = driver.find_elements(By.XPATH, '//*[@id="inp-query"]')
    # ret3 = driver.find_elements_by_xpath("//*[@id="inp-query"]")
    # print(len(ret3))
    # print(ret3)
    ?
    # 匹配圖片標簽
    ret4 = driver.find_elements(By.TAG_NAME, 'img')
    for url in ret4:print(url.get_attribute('src'))
    ?#ret4 = driver.find_elements_by_tag_name("img")
    print(len(ret4))
    ?
    ret5 = driver.find_elements(By.LINK_TEXT, "瀏覽發現")
    # ret5 = driver.find_elements_by_link_text("瀏覽發現")
    print(len(ret5))
    print(ret5)
    ?
    ret6 = driver.find_elements(By.PARTIAL_LINK_TEXT, "瀏覽發現")
    # ret6 = driver.find_elements_by_partial_link_text("瀏覽發現")
    print(len(ret6))
    # 使用class名稱查找
    ret7 = driver.find_elements(By.CLASS_NAME, 'nbg')
    print(ret7)
    driver.close()

注意:

find_element與find_elements區別

  1. 只查找一個元素的時候:可以使用find_element(),find_elements() find_element()會返回一個WebElement節點對象,但是沒找到會報錯,而find_elements()不會,之后返回一個空列表

  2. 查找多個元素的時候:只能用find_elements(),返回一個列表,列表里的元素全是WebElement節點對象

  3. 找到都是節點(標簽)

  4. 如果想要獲取相關內容(只對find_element()有效,列表對象沒有這個屬性) 使用 .text

  5. 如果想要獲取相關屬性的值(如href對應的鏈接等,只對find_element()有效,列表對象沒有這個屬性):使用 .get_attribute("href")

2、元素的操作

find_element_by_xxx方法僅僅能夠獲取元素對象,接下來就可以對元素執行以下操作 從定位到的元素中提取數據的方法

  1. 從定位到的元素中獲取數據

el.get_attribute(key) ? ? ? ? ? # 獲取key屬性名對應的屬性值
el.text ? ? ? ? ? ? ? ? ? ? ?   # 獲取開閉標簽之間的文本內容
  1. 對定位到的元素的操作

el.click() ? ? ? ? ? ? ? ? ? ? ?# 對元素執行點擊操作
?
el.submit() ? ? ? ? ? ? ? ? ? ? # 對元素執行提交操作
?
el.clear() ? ? ? ? ? ? ? ? ? ? ?# 清空可輸入元素中的數據
?
el.send_keys(data) ? ? ? ? ? ? ?# 向可輸入元素輸入數據

使用示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
?
driver =webdriver.Chrome()
?
driver.get("https://www.douban.com/")
# 打印頁面內容 (獲取到以后可以進行后續的xpath,bs4 或者存儲等)
print(driver.page_source)
?
ret4 = driver.find_elements(By.TAG_NAME, "h1")
print(ret4[0].text)
#輸出:豆瓣
?
ret5 = driver.find_elements(By.LINK_TEXT, "下載豆瓣 App")
print(ret5[0].get_attribute("href"))
#輸出:https://www.douban.com/doubanapp/app?channel=nimingye
?
driver.close()

小結

  1. 根據xpath定位元素:driver.find_elements(By.XPATH,"//*[@id='s']/h1/a")

  2. 根據class定位元素:driver.find_elements(By.CLASS_NAME, "box")

  3. 根據link_text定位元素:driver.find_elements(By.LINK_TEXT, "下載豆瓣 App")

  4. 根據tag_name定位元素:driver.find_elements(By.TAG_NAME, "h1")

  5. 獲取元素文本內容:element.text

  6. 獲取元素標簽屬性: element.get_attribute("href")

  7. 向輸入框輸入數據: element.send_keys(data)

四、selenium的其他操作

學習目標

  1. 掌握 selenium處理cookie等方法

  2. 掌握 selenium中switch的使用

  3. 掌握selenium中無頭瀏覽器的設置

1、無頭瀏覽器

我們已經基本了解了selenium的基本使用了. 但是呢, 不知各位有沒有發現, 每次打開瀏覽器的時間都比較長. 這就比較耗時了. 我們寫的是爬蟲程序. 目的是數據. 并不是想看網頁. 那能不能讓瀏覽器在后臺跑呢? 答案是可以的

from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
?
opt = Options()
opt.add_argument("--headless")
opt.add_argument('--disable-gpu')
opt.add_argument("--window-size=4000,1600") ?# 設置窗口大小
?
web = Chrome(options=opt)

1、selenium 處理cookie

通過driver.get_cookies()能夠獲取所有的cookie

  • 獲取cookie

    dictCookies = driver.get_cookies()
  • 設置cookie

    driver.add_cookie(dictCookies)
  • 刪除cookue

    #刪除一條cookie
    driver.delete_cookie("CookieName")
    # 刪除所有的cookie
    driver.delete_all_cookies()

2、頁面等待

  • 為什么需要等待 如果網站采用了動態html技術,那么頁面上的部分元素出現時間便不能確定,這個時候就可以設置一個等待時間,強制等待指定時間,等待結束之后進行元素定位,如果還是無法定位到則報錯

  • 頁面等待的三種方法

    • 強制等待

      import time
      time.sleep(n) ? ? ?# 阻塞等待設定的秒數之后再繼續往下執行
    • 顯式等待(自動化web測試使用,爬蟲基本不用)

      from selenium.webdriver.common.keys import Keys
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      ?
      WebDriverWait(driver, 10,0.5).until( EC.presence_of_element_located((By.ID, "myDynamicElement"))
      # 顯式等待指定某個條件,然后設置最長等待時間10,在10秒內每隔0.5秒使用指定條件去定位元素,如果定位到元素則直接結束等待,如果在10秒結束之后仍未定位到元素則報錯
    • 隱式等待 隱式等待設置之后代碼中的所有元素定位都會做隱式等待

      driver.implicitly_wait(10) ? ?# 在指定的n秒內每隔一段時間嘗試定位元素,如果n秒結束還未被定位出來則報錯

注意:

Selenium顯示等待和隱式等待的區別 1、selenium的顯示等待 原理:顯示等待,就是明確要等到某個元素的出現或者是某個元素的可點擊等條件,等不到,就一直等,除非在規定的時間之內都沒找到,就會跳出異常Exception

(簡而言之,就是直到元素出現才去操作,如果超時則報異常)

2、selenium的隱式等待

原理:隱式等待,就是在創建driver時,為瀏覽器對象創建一個等待時間,這個方法是得不到某個元素就等待一段時間,直到拿到某個元素位置。 注意:在使用隱式等待的時候,實際上瀏覽器會在你自己設定的時間內部斷的刷新頁面去尋找我們需要的元素

3、switch方法切換的操作

3.1 一個瀏覽器肯定會有很多窗口,所以我們肯定要有方法來實現窗口的切換。切換窗口的方法如下:
也可以使用 window_handles 方法來獲取每個窗口的操作對象。例如:
# 1. 獲取當前所有的窗口
current_windows = driver.window_handles
?
# 2. 根據窗口索引進行切換
driver.switch_to.window(current_windows[1])
?
driver.switch_to.window(web.window_handles[-1]) ?# 跳轉到最后一個窗口
driver.switch_to.window(current_windows[0]) ?# 回到第一個窗口
3.2 iframe是html中常用的一種技術,即一個頁面中嵌套了另一個網頁,selenium默認是訪問不了frame中的內容的,對應的解決思路是
driver.switch_to.frame(name/el/id) ? ? 傳入的參數可以使iframe對應的id值,也可以是用元素定位之后的元素對象

動手:qq郵箱

在使用selenium登錄qq郵箱的過程中,我們會發現,無法在郵箱的登錄input標簽中輸入內容,通過觀察源碼可以發現,form表單在一個frame中,所以需要切換到frame中

3.3 當你觸發了某個事件之后,頁面出現了彈窗提示,處理這個提示或者獲取提示信息方法如下:
alert = driver.switch_to_alert()
4. 頁面前進和后退
driver.forward() ? ? # 前進
driver.back() ? ? ? ?# 后退
driver.refresh()         # 刷新
driver.close() ? ? ? # 關閉當前窗口
5、設置瀏覽器最大窗口
driver.maximize_window()  #最大化瀏覽器窗口

4、selenium的優缺點

  • 優點

    • selenium能夠執行頁面上的js,對于js渲染的數據和模擬登陸處理起來非常容易

    • 使用難度簡單

    • 爬取速度慢,爬取頻率更像人的行為,天生能夠應對一些反爬措施

  • 缺點

    • 由于selenium操作瀏覽器,因此會將發送所有的請求,因此占用網絡帶寬

    • 由于操作瀏覽器,因此占用的內存非常大(相比較之前的爬蟲)

    • 速度慢,對于效率要求高的話不建議使用

小結

  1. 獲取cookie: get_cookies()

  2. 刪除cookie: delete_all_cookies()

  3. 切換窗口:switch_to.window()

  4. 切換iframe: switch_to.frame()

5、selenium的配置

selenium啟動谷歌瀏覽器的參數設置
通知、位置、攝像頭和麥克風權限控制的配置
	options = webdriver.ChromeOptions()options.add_experimental_option("prefs", { \"profile.default_content_setting_values.media_stream_mic": 1,     # 麥克風 1:allow, 2:block "profile.default_content_setting_values.media_stream_camera": 1,  # 攝像頭 1:allow, 2:block "profile.default_content_setting_values.geolocation": 1,          # 地理位置 1:allow, 2:block "profile.default_content_setting_values.notifications": 1,         # 通知 1:allow, 2:block 'download.default_directory': download_path  # 下載路徑})driver = webdriver.Chrome(chrome_options=options)

其他參數
options.add_argument(‘headless’) # 無頭模式
options.add_argument(‘window-size={}x{}’.format(width, height)) # 直接配置大小和set_window_size一樣
options.add_argument(‘disable-gpu’) # 禁用GPU加速
options.add_argument(‘proxy-server={}’.format(self.proxy_server)) # 配置代理
options.add_argument(’–no-sandbox’) # 沙盒模式運行
options.add_argument(’–disable-setuid-sandbox’) # 禁用沙盒
options.add_argument(’–disable-dev-shm-usage’) # 大量渲染時候寫入/tmp而非/dev/shm
options.add_argument(’–user-data-dir={profile_path}’.format(profile_path)) # 用戶數據存入指定文件
options.add_argument(‘no-default-browser-check) # 不做瀏覽器默認檢查
options.add_argument(“–disable-popup-blocking”) # 允許彈窗
options.add_argument(“–disable-extensions”) # 禁用擴展
options.add_argument(“–ignore-certificate-errors”) # 忽略不信任證書
options.add_argument(“–no-first-run”) # 初始化時為空白頁面
options.add_argument(’–start-maximized’) # 最大化啟動
options.add_argument(’–disable-notifications’) # 禁用通知警告
options.add_argument(’–enable-automation’) # 通知(通知用戶其瀏覽器正由自動化測試控制)
options.add_argument(’–disable-xss-auditor’) # 禁止xss防護
options.add_argument(’–disable-web-security’) # 關閉安全策略
options.add_argument(’–allow-running-insecure-content’) # 允許運行不安全的內容
options.add_argument(’–disable-webgl’) # 禁用webgl
options.add_argument(’–homedir={}’) # 指定主目錄存放位置
options.add_argument(’–disk-cache-dir={臨時文件目錄}’) # 指定臨時文件目錄
options.add_argument(‘disable-cache’) # 禁用緩存
options.add_argument(‘excludeSwitches’, [‘enable-automation’]) # 開發者模式
options.add_argument(’–disable-infobars’) # 禁止策略化
options.add_argument(‘–incognito’) # 隱身模式(無痕模式)
options.add_argument(‘–disable-javascript’) # 禁用javascript
options.add_argument(‘–hide-scrollbars’) # 隱藏滾動條, 應對一些特殊頁面
options.add_argument(‘blink-settings=imagesEnabled=false’) # 不加載圖片, 提升速度
options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # 手動指定使用的瀏覽器位置
options.add_argument(‘lang=en_US’) # 設置語言
prefs = {“”:“”}

prefs[“credentials_enable_service”] = False

prefs[“profile.password_manager_enabled”] = False

chrome_option_set.add_experimental_option(“prefs”, prefs) # 屏蔽’保存密碼’提示框
更多flags參數請參考:[https://blog.alanwei.com/blog/2021/03/15/chrome-flags/]

其他配置方式
可以自己復制谷歌瀏覽器的配置文件夾修改,并在啟動時指定使用的文件夾

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsoptions = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://ceshiren.com")

使用同一個瀏覽器進行多次操作

首先用cmd從谷歌瀏覽器目錄以指定端口啟動瀏覽器:
chrome.exe --remote-debugging-port=12306
再在腳本中使用參數來獲取連接,這樣就可以一直使用命令行打開的谷歌瀏覽器進行操作

from selenium import webdriver
from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:12306")
driver = webdriver.Chrome(options=options)

?上面的參數很多不是經常用到或者在selenium操作過程中使用,所以這里并沒有驗證,供大家參考。

數據采集高級動態頁面Selenium

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Stable-Diffusion ubuntu服務器部署,報錯解決方法(小白教程)

Stable Diffusion是一個深度學習模型&#xff0c;專注于生成高質量的圖像。它由CompVis團隊與Stability AI合作開發&#xff0c;并在2022年公開發布。這個模型使用文本提示&#xff08;text prompts&#xff09;生成詳細、逼真的圖像&#xff0c;是目前人工智能圖像生成領域的一…

逆向案例四:360k靜態和精靈數據動態AES解密,用js的方法

一、360K 網頁鏈接:https://www.36kr.com/p/2672600261670407 頁面中有靜態的需要解密的內容&#xff0c;確定html包&#xff0c;確定方法 1.1方法步驟 在下方的搜索中輸入decrypt(或者關鍵字window.initialState &#xff0c;進入js文件 在AES.decrypt處打上斷點&#xff0…

機器學習-03-機器學習算法流程

總結 本系列是機器學習課程的第02篇&#xff0c;主要介紹機器學習中專家系統的應用介紹 本門課程的目標 完成一個特定行業的算法應用全過程&#xff1a; 定義問題&#xff08;Problem Definition&#xff09; -> 數據收集(Data Collection) -> 數據分割(Dataset Spit…

[LeetBook]【學習日記】類鏈表反轉——尋找倒數第cnt個元素

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 題目描述 訓練計劃 II 給定一個頭節點為 head 的鏈表用于記錄一系列核心肌群訓練項目編號&#xff0c;請查找并返回倒數第 cnt 個訓練項目編號。 示例 1&#xff1…

守護無價數據:文件備份的重要性與實用策略

一、數據安全&#xff1a;為何文件備份至關重要 在數字化時代&#xff0c;我們的生活和工作越來越離不開電子設備與其中的文件數據。這些文件可能包含重要的工作文檔、珍貴的家庭照片、個人的創意作品等&#xff0c;它們是我們回憶的載體&#xff0c;也是我們工作和創新的基石…

PDF Expert for Mac v3.9.2中文激活版下載

PDF Expert for Mac是一款易于使用的 PDF 編輯器和注釋器&#xff0c;專為 Mac 設備設計。它允許用戶輕松查看、編輯、簽名、注釋和共享 PDF。該軟件使用戶能夠向他們的 PDF 添加文本、圖像、鏈接和形狀&#xff0c;突出顯示和標記文本&#xff0c;填寫表格以及簽署數字文檔。它…

金融行業專題|期貨超融合架構轉型與場景探索合集(2023版)

更新內容&#xff1a; 更新 SmartX 超融合在期貨行業的覆蓋范圍、部署規模與應用場景。新增 CTP 主席系統實踐與評測、容器云資源池等場景實踐。更多超融合金融核心生產業務場景實踐&#xff0c;歡迎下載閱讀電子書《SmartX 金融核心生產業務場景探索文章合集》。 面對不斷變…

Golang中的四個括號

代碼如下&#xff0c;首先第一個括號內容為wk *worker表示這個函數是一個方法&#xff0c;屬于結構體worker的方法&#xff0c;第二個括號內容為say string&#xff0c;是方法的參數&#xff0c;第三個括號內容err error是方法的返回值&#xff0c;第四個括號是work方法內部的匿…

mac iNode 斷開后沒網 經測試 后臺還在運行

界面斷開&#xff0c;但是連不上網&#xff1a;實際上可能是服務在后臺還在運行 解決方式&#xff1a;終端執行命令 &#xff0c;手動停止iNode服務 sudo /Library/StartupItems/iNodeAuthService/iNodeAuthService stop 停掉之后&#xff0c;有可能連不上網&#xff0c;斷開wi…

基于springboot+vue的美食推薦商城

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

網工必懂的ICMP協議

福建廈門微思網絡始于2002年&#xff0c;面向全國招生&#xff01; 主要課程&#xff1a;華為、思科、紅帽、Oracle、VMware、CISP安全系列、PMP....... 網絡工程師實用課程華為HCIA課程介紹 網絡工程師使用課程華為HCIP課程介紹 網絡工程師使用課程華為HCIE課程介紹 因特網…

更詳細的軟件測試理論基礎:流程,開發、測試模型,測試分類,測試用例及其設計方法,缺陷

文章目錄 一、測試流程二、開發模型1、 瀑布模型2、增量模型3、快速模型4、其他 三、測試模型1、V模型2、W模型 四、測試分類五、測試用例 test case六、測試用例設計方法1、等價類劃分法2、邊界值分析法3、因果圖法4、判定表法5、正交法6、場景法7、流程分析法8、錯誤推測法方…

數據分析-Pandas數據的探查面積圖

數據分析-Pandas數據的探查面積圖 數據分析和處理中&#xff0c;難免會遇到各種數據&#xff0c;那么數據呈現怎樣的規律呢&#xff1f;不管金融數據&#xff0c;風控數據&#xff0c;營銷數據等等&#xff0c;莫不如此。如何通過圖示展示數據的規律&#xff1f; 數據表&…

第16章-DNS

目錄 1. 域名 1.1 產生背景 1.2 概述 1.3 域名的樹形層次化結構 2. DNS 2.1 概述 2.2 工作機制 3. DNS查詢模式 3.1 遞歸查詢&#xff1a; 3.2 迭代查詢&#xff1a; 4. 相關知識點 4.1 集中式DNS 4.2 國內通用DNS 4.3 配置DNS代理 1. 域名 1.1 產生背景 ① IP…

【Excel PDF 系列】iText 庫直接實現表格 PDF

你知道的越多&#xff0c;你不知道的越多 點贊再看&#xff0c;養成習慣 如果您有疑問或者見解&#xff0c;歡迎指教&#xff1a; 企鵝&#xff1a;869192208 文章目錄 前言生成表格 PDF 效果引入 pom 配置代碼實現定義 CreateExcelToPdfModel 對象主方法 前言 最近遇到生成 E…

Java必須掌握的繼承中的構造方法和this super關鍵字(含面試大廠題和源碼)

在Java中&#xff0c;繼承中的構造方法和關鍵字this、super是面試中經常涉及的重要話題。下面是一個潛在的大廠面試題&#xff0c;以及可能的解答和討論。 面試題&#xff1a; 請解釋Java中繼承中構造方法的作用以及關鍵字this和super的使用場景。請提供示例代碼加以說明。 …

EchoServer回顯服務器簡單測試

目錄 工具介紹 工具使用 測試結果 工具介紹 github的一個開源項目,是一個測壓工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年寫的一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL&#xff0c;測試網站在壓力下工作的…

ARMv8-A電源管理Power management

目錄 一、ARMv8-A電源管理概述 二、idle管理 2.1 電源和時鐘 Standby-待機 Retention-保持 Powerdown-關機 Dormant mode-休眠模式 Hotplug-熱插拔 三、動態電壓和頻率調節 四、匯編語言power指令 五、電源狀態協調接口 一、ARMv8-A電源管理概述 許多ARM系統是移動…

二維碼門樓牌管理系統:城市數字化管理的新里程碑

文章目錄 前言一、二維碼門樓牌管理系統的構成二、二維碼門樓牌管理系統的功能三、二維碼門樓牌管理系統的應用四、二維碼門樓牌管理系統的未來發展 前言 隨著城市管理的數字化、智能化水平不斷提升&#xff0c;二維碼門樓牌管理系統作為一種創新的城市管理方法&#xff0c;正…

JavaScript 學習總結(17)—— 前端開發規范之命名規范、html 規范、css 規范、js 規范

前言 一個好的程序員肯定是要能書寫可維護的代碼,而不是一次性的代碼,怎么能讓團隊當中其他人甚至一段時間時候你再看你某個時候寫的代碼也能看懂呢,這就需要規范你的代碼了。我是有一點強迫癥的人,上周我們后端給我了一個CanUsename的接口(該接口的目的是判斷輸入的目的…