日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

《開源精選》是我們分享Github、Gitee等開源社區中優質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的是一個開源基于 Python/ target=_blank class=infotextkey>Python 的 Web 自動化操作集成工具——DrissionPage。

最近又火了一個Web自動化工具,python大神都在用

 

用 requests 做數據采集面對要登錄的網站時,要分析數據包、JS 源碼,構造復雜的請求,往往還要應付驗證碼、JS 混淆、簽名參數等反爬手段,門檻較高。若數據是由 JS 計算生成的,還須重現計算過程,體驗不好,開發效率不高。

使用 selenium,可以很大程度上繞過這些坑,但 selenium 效率不高。因此,這個庫將 selenium 和 requests 合而為一,不同須要時切換相應模式,并提供一種人性化的使用方法,提高開發和運行效率。

除了合并兩者,本庫還以網頁為單位封裝了常用功能,簡化了 selenium 的操作和語句,在用于網頁自動化操作時,減少考慮細節,專注功能實現,使用更方便。一切從簡,盡量提供簡單直接的使用方法,對新手更友好。

 

特性

  • 代碼高度集成,以簡潔的代碼為第一追求。
  • 頁面對象可在 selenium 和 requests 模式間任意切換,保留登錄狀態。
  • 極簡單但強大的元素定位語法,支持鏈式操作,代碼極其簡潔。
  • 兩種模式提供一致的 API,使用體驗一致。
  • 人性化設計,集成眾多實用功能,大大降低開發工作量

亮點功能

  • 每次運行程序可以反復使用已經打開的瀏覽器。如手動設置網頁到某個狀態,再用程序接管,或手動處理登錄,再用程序爬內容。無須每次運行從頭啟動瀏覽器,超級方便
  • 使用 ini 文件保存常用配置,自動調用,也提供便捷的設置 API,遠離繁雜的配置項
  • 極致簡明的定位語法,支持直接按文本定位元素,支持直接獲取前后兄弟元素和父元素等
  • 強大的下載工具,操作瀏覽器時也能享受快捷可靠的下載功能
  • 下載工具支持多種方式處理文件名沖突、自動創建目標路徑、斷鏈重試等
  • 訪問網址帶自動重試功能,可設置間隔和超時時間
  • 訪問網頁能自動識別編碼,無須手動設置
  • 鏈接參數默認自動生成Host和Referer屬性
  • 可以隨時直接隱藏或顯示瀏覽器進程窗口,非 headless 或最小化
  • 可自動下載合適版本的 chromedriver,免去麻煩的配置
  • d 模式查找元素內置等待,可任意設置全局等待時間或單次查找等待時間
  • 點擊元素集成 js 點擊方式,一個參數即可切換點擊方式
  • 點擊支持失敗重試,可用于保證點擊成功、判讀網頁遮罩層是否消失等
  • 輸入文本能自動判斷是否成功并重試,避免某些情況下輸入或清空失效的情況發生
  • d 模式下支持全功能的 xpath,可直接獲取元素的某個屬性,selenium 原生無此功能
  • 支持直接獲取shadow-root,和普通元素一樣操作其下的元素
  • 支持直接獲取after和before偽元素的內容
  • 可以在元素下直接使用 > 以 css selector 方式獲取當前元素直接子元素。原生不支持這種寫法
  • 可簡單地使用 lxml 來解析 d 模式的頁面或元素,爬取復雜頁面數據時速度大幅提高
  • 輸出的數據均已轉碼及處理基本排版,減少重復勞動
  • 可方便地與 selenium 或 requests 原生代碼對接,便于項目遷移
  • 使用 POM 模式封裝,可直接用于測試,便于擴展
  • d 模式配置可同時兼容debugger_address和其它參數,原生不能兼容

 

結構圖

如圖所示,Drission對象負責鏈接的創建、共享登錄狀態等工作,類似 selenium 中 driver 的概念。MixPage對象負責對獲取到的頁面進行解析、操作。DriverElement和SessionElement則是從頁面對象中獲取到的元素對象。負責對元素進行解析和操作。

最近又火了一個Web自動化工具,python大神都在用

 

簡單演示

與 selenium 代碼對比

跳轉到第一個標簽頁

# 使用 selenium:
driver.switch_to.window(driver.window_handles[0])

# 使用 DrissionPage:
page.to_tab(0)

按文本選擇下拉列表

# 使用 selenium:
from selenium.webdriver.support.select import Select

select_element = Select(element)
select_element.select_by_visible_text('text')

# 使用 DrissionPage:
element.select('text')

拖拽一個元素

# 使用 selenium:
ActionChains(driver).drag_and_drop(ele1, ele2).perform()

# 使用 DrissionPage:
ele1.drag_to(ele2)

與 requests 代碼對比

獲取元素內容

url = 'https://baike.baidu.com/item/python'

# 使用 requests:
from lxml import etree

headers = {
    'User-Agent': 'Mozilla/5.0 (windows NT 6.3; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
response = requests.get(url, headers=headers)
html = etree.HTML(response.text)
element = html.xpath('//h1')[0]
title = element.text

# 使用 DrissionPage:
page = MixPage('s')
page.get(url)
title = page('tag:h1').text

下載文件

url = 'https://www.baidu.com/img/flexible/logo/pc/result.png'
save_path = r'C:download'

# 使用 requests:
r = requests.get(url)
with open(f'{save_path}\img.png', 'wb') as fd:
   for chunk in r.iter_content():
       fd.write(chunk)
        
# 使用 DrissionPage:
page.download(url, save_path, 'img')  # 支持重命名,處理文件名沖突,自動創建目標文件夾

爬取新冠排行榜

網址:
https://www.outbreak.my/zh/world,此示例爬取全球新冠情況排行榜。該網站是純 html 頁面,特別適合 s 模式爬取和解析。

最近又火了一個Web自動化工具,python大神都在用

 

from DrissionPage import MixPage

# 用 s 模式創建頁面對象
page = MixPage('s')  
# 訪問數據網頁
page.get('https://www.outbreak.my/zh/world')  

# 獲取表頭元素
thead = page('tag:thead')  
# 獲取表頭列,跳過其中的隱藏的列
title = thead.eles('tag:th@@-style:display: none;')  
data = [th.text for th in title]

print(data)  # 打印表頭

# 獲取內容表格元素
tbody = page('tag:tbody')  
# 獲取表格所有行
rows = tbody.eles('tag:tr')  

for row in rows: 
    # 獲取當前行所有列
    cols = row.eles('tag:td')  
    # 生成當前行數據列表(跳過其中沒用的幾列)
    data = [td.text for k, td in enumerate(cols) if k not in (2, 4, 6)]
    
    print(data)  # 打印行數據

輸出:

['總 (205)', '累積確診', '死亡', '治愈', '現有確診', '死亡率', '恢復率']
['美國', '55252823', '845745', '41467660', '12,939,418', '1.53%', '75.05%']
['印度', '34838804', '481080', '34266363', '91,361', '1.38%', '98.36%']
['巴西', '22277239', '619024', '21567845', '90,370', '2.78%', '96.82%']
['英國', '12748050', '148421', '10271706', '2,327,923', '1.16%', '80.57%']
['俄羅斯', '10499982', '308860', '9463919', '727,203', '2.94%', '90.13%']
['法國', '9740600', '123552', '8037752', '1,579,296', '1.27%', '82.52%']
......

登錄 gitee 網站

網址:https://gitee.com/login,此示例演示使用控制瀏覽器的方式自動登錄 gitee 網站。

from DrissionPage import MixPage

# 用 d 模式創建頁面對象(默認模式)
page = MixPage()
# 跳轉到登錄頁面
page.get('https://gitee.com/login')

# 定位到賬號文本框并輸入賬號
page.ele('#user_login').input('你的賬號')
# 定位到密碼文本框并輸入密碼
page.ele('#user_password').input('你的密碼')
# 點擊登錄按鈕
page.ele('@value=登 錄').click()

 

—END—

開源協議:BSD-3-Clause

開源地址:
https://gitee.com/g1879/DrissionPage

分享到:
標簽:自動化 Web
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定