当前位置: 首页 > news >正文

Python自动化我选DrissionPage,弃用Selenium

DrissionPage 是一个基于 python 的网页自动化工具。

它既能控制浏览器,也能收发数据包,还能把两者合而为一。

可兼顾浏览器自动化的便利性和 requests 的高效率。

它功能强大,内置无数人性化设计和便捷功能。

它的语法简洁而优雅,代码量少,对新手友好。

以下是我使用DrissionPage做的抖音无水印视频提取代码:

douyin.py:

# ---encoding:utf-8---
# @Time    : 2024/1/13 16:43
# @Author  : stzz Wang
# @Email   :1050100468@qq.com
# @Site    : 
# @File    : douyin.py
# @Project : douyi_analysis
# @Software: PyCharm
import os
import sysBASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
sys.path.append(BASE_DIR)from DrissionPage import ChromiumOptions, SessionOptions, WebPage
from CODES.config.CONFIG import *class DouYin:def __init__(self):co = ChromiumOptions(ini_path=Config.drission_page_init_file_path)so = SessionOptions(ini_path=Config.drission_page_init_file_path)self.page = WebPage(chromium_options=co, session_or_options=so)def start_listen(self):self.page.listen.start()def end_listen(self):self.page.listen.pause(True)self.page.listen.stop()def load_page(self, url):self.page.get(url)
douyin_without_watermarker_analysis.py:
# ---encoding:utf-8---
# @Time    : 2024/1/13 16:53
# @Author  : stzz Wang
# @Email   :1050100468@qq.com
# @Site    : 
# @File    : douyin_without_watermarker_analysis.py
# @Project : douyi_analysis
# @Software: PyCharm
import os
import sys
import timeBASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
sys.path.append(BASE_DIR)from fastapi import APIRouter
from CODES.controllers.model.douyin import *
from CODES.config.CONFIG import *
import json
from pydantic import BaseModeldouyin_wwa = APIRouter()douyin_instance = DouYin()class DouYinWithoutWatermarker(BaseModel):url: str@douyin_wwa.post("/douyin_without_watermarker_analysis")
async def douyin_without_watermarker_analysis(accept: DouYinWithoutWatermarker):douyin_instance.load_page(accept.url)douyin_instance.start_listen()page = douyin_instance.pagestart_time = time.time()try:while True:res = page.listen.wait()  # 等待并获取一个数据包if "https://www.douyin.com/aweme/v1/web/aweme/post/" in res.url:data = json.loads(res._raw_body)data_list = data["aweme_list"]data = []for item in data_list:d = {"title" : item["desc"],"urls" : item["video"]["play_addr"]["url_list"]}data.append(d)breakuse_time = time.time() - start_timedata = {"data": data,"use_time": use_time}except Exception as e:data = {"data": e,"error_code": 500}finally:douyin_instance.end_listen()return data

完整代码在github上:

GitHub - STZZ-1992/douyin_analysis: 抖音短视频无水印的解析服务抖音短视频无水印的解析服务. Contribute to STZZ-1992/douyin_analysis development by creating an account on GitHub.icon-default.png?t=N7T8https://github.com/STZZ-1992/douyin_analysis

相关文章:

  • beego的模块篇 - I18n国际化
  • MFC 序列化机制
  • el-table样式错乱解决方案
  • 鸿蒙开发系列教程(五)--ArkTS语言:组件开发
  • Java SE入门及基础(23)
  • 力扣hot100 最长有效括号 动态规划
  • Blendshape 表情控件
  • RenderDoc 增加 DXBC to HLSL 的 shader viewer
  • docker 的 Dockerfile 简单使用
  • 分布式ID(2):雪花算法生成ID
  • GL Logger和CANFDLog-OTL-128两款记录仪都是如何实现高效的报文录制的?
  • 跟着cherno手搓游戏引擎【6】ImGui和ImGui事件
  • MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成
  • OpenHarmony 应用开发入门 (一、环境搭建及第一个Hello World)
  • 数据结构之二叉搜索树
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Akka系列(七):Actor持久化之Akka persistence
  • C++类的相互关联
  • EventListener原理
  • JavaScript DOM 10 - 滚动
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Next.js之基础概念(二)
  • passportjs 源码分析
  • Spring框架之我见(三)——IOC、AOP
  • vue2.0项目引入element-ui
  • webpack入门学习手记(二)
  • 开源地图数据可视化库——mapnik
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 手写双向链表LinkedList的几个常用功能
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • Java总结 - String - 这篇请使劲喷我
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 我们雇佣了一只大猴子...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • $.ajax()
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十三)Flask之特殊装饰器详解
  • (四)模仿学习-完成后台管理页面查询
  • (一) storm的集群安装与配置
  • (转)菜鸟学数据库(三)——存储过程
  • (转)甲方乙方——赵民谈找工作
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .dwp和.webpart的区别
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET Micro Framework初体验(二)
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET开发不可不知、不可不用的辅助类(一)
  • @synthesize和@dynamic分别有什么作用?
  • @Transactional 竟也能解决分布式事务?