- python爬虫之自动化爬取网页
陌小
pythonseleniumpythonchrome
以下为公开源码fromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsimporttimefrombs4importBeautifulSoupurl='https://movie.douban.com/'chrome_optins=Options()chrome_optins.add_argument
- 苹果AI功能,GPU内存瓶颈,大气预测模型,Chrome内置Gemini
一支烟一朵花
人工智能ai业界资讯神经网络
智源社区刚刚!苹果发布AppleIntelligence,官宣免费接入ChatGPT,Siri迎来重磅更新大模型竞速赛鸣枪开跑后,苹果似乎已经脱离了第一梯队,曾经的行业风向标并没有像其他大厂那样频繁地宣讲AI,加之缺乏能够参与竞争的「明星产品」,其一度被贴上了「落后」的标签。但其实熟悉苹果的网友都知道,这是一家「重落地」的公司,更加擅长的是把创新技术工程化,实现「工程创新」。也正因如此,在生成式A
- 使用Node.js在云服务上进行部署
安静旅者
node.js编程
Node.js是一个基于ChromeV8引擎的JavaScript运行时,它可以使我们在服务器端运行JavaScript代码。在云服务上部署Node.js应用程序可以让我们轻松地扩展和管理我们的应用程序。本文将介绍如何使用Node.js在云服务上进行部署,并提供相应的源代码。步骤1:选择云服务提供商在开始之前,我们需要选择一个云服务提供商来托管我们的Node.js应用程序。目前市场上有许多可选的云
- Selenium自动化测试实战教程详解
程序员杰哥
selenium测试工具python软件测试职场和发展自动化测试测试用例
ChromeDevTools简介ChromeDevTools是一组直接内置在基于Chromium的浏览器(如Chrome、Opera和MicrosoftEdge)中的工具,用于帮助开发人员调试和研究网站。借助ChromeDevTools,开发人员可以更深入地访问网站,并能够:检查DOM中的元素即时编辑元素和CSS检查和监控网站的性能模拟用户的地理位置模拟更快/更慢的网络速度执行和调试JavaScr
- nginx 在线预览与强制下载
勤不了一点
nginxnginx运维
环境如下:nginxversion:nginx/1.14.1nginxversion:nginx/1.16.1Chrome:102.0.5005.63(正式版本)(64位)CentOSLinuxrelease7.5.1804(Core)将任意类型文件设置成在线预览或者直接下载以.log和.txt文件为例,nginx默认配置下.txt是可以在线打开,而.log会有弹窗,也就是下载。使用是nginx,
- IntersectionObserver API 使用,判断某个元素是否进入了“视口“
T-shmily
API前端
一、APIIntersectionObserverAPI:可以自动"观察"元素是否可见,Chrome51+已经支持。其他支持Firefox:55+、Safari:12.1+、Edge:15+、Opera:44+由于可见(visible)的本质是,目标元素与视口产生一个交叉区,所以这个API叫做"交叉观察器"。用法:vario=newIntersectionObserver(callback,opt
- 谷歌浏览器chrome插件、扩展程序无法下载的解决方法
weixin_33878457
以下是下载离线插件包的方法:每个GoogleChrome扩展都有一个固定的ID,例如https://chrome.google.com/webstore/detail/bfbmjmiodbnnpllbbbfblcplfjjepjdn把这个扩展的ID复制下来,替换下面URL中的“~~~~”https://clients2.google.com/service/update2/crx?response
- Node.js使用教程
m0_74823408
面试学习路线阿里巴巴node.jsvim编辑器
Node.js使用教程Node.js是一个基于ChromeV8引擎的JavaScript运行环境,它让JavaScript运行在服务器端。以下是一个简单的Node.js使用教程:一、Node.js开发环境和编译1.1安装Node.js访问Node.js官网下载并安装适合您操作系统的Node.js版本。1.2创建一个Node.js项目在您的工作目录中,创建一个新的文件夹作为项目目录,例如命名为my_
- selenium浏览器下载汇总
gallonyin
RPAselenium测试工具
chromedriver官网:https://googlechromelabs.github.io/chrome-for-testing/下载chromewin64位:https://storage.googleapis.com/chrome-for-testing-public/131.0.6778.85/win64/chrome-win64.zip下载chromedriverwin64位:ht
- chrome高版本浏览器不兼容driver.execute_script(“return window.performance.getEntries()“)的解决方法
lilaihao1030
疑难杂症集chromejavaseleniumperformanceexecute_scriptgetEntries
一、背景之前使用driver.execute_script("returnwindow.performance.getEntries()")的方法获取浏览器所有请求,很好用,可是后来一旦更新谷歌浏览器后,运行相关代码就会报错(如下)entries=self.driver.execute_script("returnwindow.performance.getEntries()")File"C:\U
- selenium 调用chrome driver 报错
feelxing
seleniumseleniumchromechromedriver
一、配置Systeminfo:host:'MEV-PC',ip:'192.168.1.2',os.name:'Windows7',os.arch:'amd64',os.version:'6.1',java.version:'1.8.0_112'chromedrivert2.9selenium-java版本3.31二、运行代码三、错误Exceptioninthread"main"org.openqa
- 支持selenium的chrome driver更新到133.0.6943.126
代码的乐趣
seleniumchromepython
最近chrome释放新版本:133.0.6943.126如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:ThisversionofChromeDriveronlysupportsChromev
- 支持selenium的chrome driver更新到133.0.6943.98
代码的乐趣
seleniumchromepython
最近chrome释放新版本:133.0.6943.98如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:ThisversionofChromeDriveronlysupportsChromeve
- 支持selenium的chrome driver更新到133.0.6943.141
代码的乐趣
seleniumchromepython
最近chrome释放新版本:133.0.6943.141如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:ThisversionofChromeDriveronlysupportsChromev
- 前端学习Day4 CSS基础笔记
Yukukiii
前端css学习
目标能够说出什么是CSS能够使用CSS基础选择器能够设置字体样式能够设置文本样式能够说出CSS的三种引入方式能够使用Chrome调试工具调试样式CSS:层叠样式表(Cascadingstylesheets)语法:写在head里面p{color:brown;//文字变色font-size:30px;//字变大background-color:blue;//背景色为蓝色width:400px;heig
- 「Selenium+Python自动化从0到1①|2025最新环境搭建+浏览器驱动避坑指南(附验证代码)」
俗人咖
seleniumpython自动化
Selenium+Python自动化1-环境搭建一、Selenium简介Selenium是一个广泛使用的自动化测试工具,主要用于Web应用程序的自动化测试。它支持多种编程语言(如Java、Python、C#、Ruby、JavaScript等),并允许用户控制浏览器执行自动化任务,例如点击按钮、填写表单、验证页面内容等。Selenium可以在多种浏览器(如Chrome、Firefox、Edge、Sa
- 框架基本知识总结 Day9
小斌的Debug日记
vuevue.js
Node.jsNode.js是一个基于ChromeV8JavaScript引擎构建的JavaScript运行环境。它使得开发者能够在服务器端运行JavaScript,而不仅仅是在浏览器中运行。SE6的一些语法特性1.解构是一种从数组或对象中提取数据并将其赋值给变量的语法。它让你可以更简洁地获取对象或数组中的值,而不需要通过繁琐的方式逐个提取。属性,数组,键值对,方法都可以解构2.模块化类似于jav
- 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
从Chrome125开始,支持了一个全新的CSS特性-AnchorPositioning,翻译过来即是锚点定位。在之前的文章中,我们较为系统的讲述了这个新特性的使用,感兴趣的可以翻开一下前文:抢先体验!超强大的AnchorPositioning锚点定位。在本文中,我们将使用锚点定位,实现一个简化版本的Popover功能。下面,我们将一起一探究竟。传统Popover功能长话短说,在日常的前端需求开发
- chromedriver自动下载 —— python
(* ̄︶ ̄)(*^▽^*)
python开发语言
#工作实践webdriver自带的ChromeDriverManager().install()方法,对应的驱动地址自从114版本后没有更新了;隔一段时间就需要手动下载驱动,所以写了一个简单的自动更新方法,还有一些不足,勉强够用吧1、查看源码,大致是保存了一个json文件,每次获取driver最后更新版本,并更新到json文件中;然后下载最新的资源并解压到文件夹2、本来想改源码,但是有修改提示,考
- selenium如何实现,开启浏览器的开发者工具模式
test猿
selenium测试工具
核心配置方案pythonCopyCode#通用导入方式(适配Selenium5.x+)fromseleniumimportwebdriverfromselenium.webdriver.common.serviceimportService#---------------------------#️Chrome/Edge配置方案#---------------------------defchro
- selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式
test猿
selenium测试工具
核心实现代码pythonCopyCodefromseleniumimportwebdriverfromselenium.webdriver.chrome.optionsimportOptionsdefenable_devtools_with_toggle():options=Options()#强制开启开发者工具options.add_argument("--auto-open-devtools-
- 【区块链技术开发】 关于Windows10平台Solidity语言开发环境配置
源代码杀手
区块链技术开发区块链
目录1、安装Node.js2、安装Solidity编译器3、安装RemixIDE4、安装MetaMask浏览器插件5、环境配置与问题解决6、安装Ganache:以太坊区块链开发测试工具7、安装Web3.js库8、VsCode配置Solidity语言环境并运行示例代码编译方法1:运行上述示例只需在终端输入编译命令Solcjs编译方法2:安装Solidity插件9、在VSCode运行合约参考文献在Wi
- 最详细的谷歌GMS EDLA认证介绍,你想知道的这里都有!
深光标准技术
安卓
一、GMS认证介绍,谷歌EDLA认证介绍,目前最详细的关于EDLA认证的介绍GMS全称是GoogleMobileService(即谷歌移动服务),GMS认证简单来说就是使用安卓系统的移动设备在经过谷歌的一系列测试后取得谷歌的认可,可以合法使用谷歌提供的各种软件服务,包括Chrome、Gmail、YouTube、地图、PlayStore等等。Android设备需要GMS认证才能运行所有Google的
- Node.js快速总结
一蓑烟雨,一任平生
jsjavascriptnode.js
理解Node.js●是一个基于ChromeV8引擎的JavaScript运行时。●非阻塞、事件驱动、异步I/O,适合高并发场景。✅核心概念●事件循环(EventLoop):Node.js的异步机制。●模块系统:使用require()引入模块,module.exports导出模块。●文件系统(fs):处理文件读写。●HTTP模块:构建Web服务器。创建HTTP服务器consthttp=require
- Node.js定义以及性能优化
Sunshinedada
node.js
Node.jsNode.js是一个基于ChromeV8引擎的JavaScript运行时,广泛用于构建高性能的网络应用。以下是一些常见的Node.js面试题及其解答,帮助你准备面试:1.什么是Node.js?Node.js是一个基于ChromeV8引擎的JavaScript运行时,允许开发者使用JavaScript编写服务器端代码。它采用事件驱动、非阻塞I/O模型,适合构建高性能、可扩展的网络应用。
- 青柠起始页:化繁为简,简洁美观新体验
Code_流苏
实用软件与高效工具青柠起始页浏览器插件简洁无广美观化繁为简
名人说:莫愁千里路,自有到来风。——钱珝创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder)目录一、青柠起始页二、核心功能三、安装方法1、Chrome应用商店(需科学)2、官网下载(可直接访问)四、使用演示1、搜索引擎搜索2、自定义快捷链接3、壁纸切换五、平台反响与个人感受很高兴你打开了这篇博客,更多好用的软件工具、浏览器插件,请关注我、订阅专栏《实用软件与高效工具》,内容持续更
- 2024年Scrapy+Selenium项目实战--携程旅游信息爬虫
2401_84563287
程序员scrapyselenium旅游
简介携程(you.ctrip.com)是一个提供旅游信息的网站,但它的部分内容可能是动态加载的,难以直接通过Scrapy获取。这时就需要借助Selenium这样的工具,模拟浏览器行为进行数据的获取和处理。工具准备Scrapy:一个用于爬取网站并提取结构化数据的强大框架。Selenium:一个自动化测试工具,可以模拟用户操作浏览器的行为。ChromeDriver:作为SeleniumWebDrive
- Node.js 完全教程:从入门到精通
web15117360223
面试学习路线阿里巴巴node.js
Node.js完全教程:从入门到精通Node.js是一个基于ChromeV8引擎的JavaScript运行环境,允许开发者在服务器端使用JavaScript。它的非阻塞I/O和事件驱动架构使得Node.js非常适合于构建高性能的网络应用。本文将详细介绍Node.js的安装、基本语法、模块系统、异步编程、Express框架、数据库操作等内容,帮助你从入门到精通Node.js。1.Node.js简介N
- centos搭建 Node.js 开发环境
geejkse_seff
面试学习路线阿里巴巴centosnode.jslinux
Node.js,通常简称为Node,是一个事件驱动I/O服务端JavaScript环境,基于ChromeV8引擎,具备速度快、性能强等特点,可用于搭建各类网络应用,及作为小程序后端服务环境。npm和npx都是和Node.js相关的命令行工具,它们在JavaScript开发中扮演着重要的角色。npm:1、允许开发者在项目中安装、管理和共享JavaScript包和模块;2、可以自动处理项目依赖,确保所
- 【安装及调试旧版Chrome + 多版本环境测试全攻略】
Gazer_S
chrome前端
安装及调试旧版Chrome+多版本环境测试全攻略(新手友好版|覆盖安装/运行/调试全流程)️【背景篇】为什么我们需要旧版浏览器测试?浏览器世界的“时间旅行”难题1️⃣企业遗留系统依赖:许多政府、银行系统仍运行在IE或Chrome50以下版本,前端代码必须兼容“古董”环境。例:某医院HIS系统仅支持Chrome49,升级成本高达数百万!2️⃣用户版本碎片化:根据StatCounter2023数据:全
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持