首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 爬取朋友圈最新方法!!

有没有稍微简单一点呢? Appnium 或许是一个方法,操作起来比钩子简单多了,但是,Appnium 环境配置,就会吓跑很多朋友了。 所以,Appnium 还是门槛稍高。...用于获取微信电脑版进程信息pywinauto 用于自动化控制微信电脑版 然后,我们通过 psutil 库获取到微信电脑版程序进程ID: PID = 0 for proc in psutil.process_iter...然后, PyWinAuto 实例化一个应用: app = Application(backend='uia').connect(process=PID) 接着控制微信电脑版,把朋友圈窗口打开:...: 我们来看一个具体例子,例如朋友圈内这条信息: 它在 dump_tree() 结构如下所示: 可以看到,窗口内每一个信息,比如联系人名称、朋友圈内容、朋友圈发布时间等等都是各种组件构成...我们可以通过获取和控制这些个组件,来实现数据提取。 比如在这个例子里,我们就可以通过定位到 Edit 这个组件来获取到这条朋友圈内容: 跟其他工具比起来,是不是算是异常简单了?

3.5K30

windows GUI自动化怎么做

它直接包装了几乎所有的 Windows API,可以方便地 Python 直接调用 pywin32 安装:pip install pywin32 win32api :模块内定义了常用一些 API函数...Adobe Acrobat句柄通过父窗口句柄获取子句柄#parent为父窗口句柄iddef get_child_windows(parent): 下面重点讲这个库 pywinauto pywinauto...对于 pywinauto 模块,主要使用其中 Application 类,需要导入包,并定义一个 Application 类对象。...这里先介绍官方文档两种方法: (1)通过top_dlg = app.top_window_() 来获取最上面的window(不推荐,如果有新进程,就会得到错误对象) (2)通过find_dlg = app.window...如果需要下拉框,pywinauto,uiautomation都是不错选择。 pyautogui可以用在定位不到元素地方,图像或者坐标来定位,也可以操作鍵盤,快捷鍵。

2.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

Python 爬取朋友圈最新方法!!

有没有稍微简单一点呢?** Appnium 或许是一个方法,操作起来比钩子简单多了,但是,Appnium 环境配置,就会吓跑很多朋友了。 **所以,Appnium 还是门槛稍高。...`from pywinauto.application import Application` 其中: psutil 用于获取微信电脑版进程信息pywinauto 用于自动化控制微信电脑版 然后...`PID = pinfo['pid']` 这个进程ID用来提供给 PyWinAuto 以连接微信电脑版。然后, PyWinAuto 实例化一个应用: 1....: 图片.png 它在 dump_tree() 结构如下所示: 图片.png 可以看到,窗口内每一个信息,比如联系人名称、朋友圈内容、朋友圈发布时间等等都是各种组件构成。...我们可以通过获取和控制这些个组件,来实现数据提取。比如在这个例子里,我们就可以通过定位到 Edit 这个组件来获取到这条朋友圈内容: 图片.png 跟其他工具比起来,是不是算是异常简单了?

97840

使用 Python 进行 Windows GUI 自动化

** 数据录入 **:如果我们需要在多个表单或应用程序输入相同数据,自动化脚本可以帮助我们节省大量时间和精力。...pywinauto 使用场景 回归测试:定期运行相同测试,确保软件在进行更改或更新后仍然可以正常工作。 质量保证:确保软件新版本或功能与预期用户体验一致。... pywinauto 来自动化 Windows 计算 下面是一个简单 pywinauto 教程,我们将演示如何用 pywinauto 来自动化 Windows 计算操作。...** pywinauto 来自动化 Windows 记事本 导入模块 在 Python 脚本,我们需要导入 pywinauto 库。...我们可以使用 app 对象 window_ 方法来获取窗口。然后,我们可以调用窗口方法来执行各种操作,如点击按钮或输入文本。

72240

UI自动化工具,你知道有几个?

Pyautogui自带图像匹配函数精度不是很高,可以加入opencv匹配函数来代替,更加准确方便。...通过图形化界面,对测试对象、测试步骤、例等层层封装映射,清晰理清业务关系。业务变动、界面调整时仅需修改相应业务库内容。...Pyautogui侧重于鼠标、键盘、截图等功能,且是基于图像匹配进行定位Pywinauto侧重于对C/S系统操作,虽然也有键盘和鼠标的模拟操作,但核心上还是软件上操作更多。...codeui CodeUI Test是微软自动化测试一个比较好项目,它原理是获取到Windows窗口上控件,然后针对控件部分属性进行获取和对比,模拟对控件进行点击、双击、右键点击等事件。...将开发人员和QA部门人员繁琐耗时的人工测试解脱出来。

9.1K21

Pywinauto之Windows UI 自动化1

1、导入模块from pywinauto.application import Application 2、判断是被测对象是什么语言,如官方文档所示,主要是判断backend是什么类别 Once you...>然后鼠标点一下你需要测试程序窗体,inspect就会显示相关信息。 下图为点击window文件夹结果,inspect显示了相关信息,如下图所示。说明backend为uia。 ?...5、确定自动化入口 主要是限制自动化控制进程范围。如一个程序有多个实例,自动化控制一个实例,保证其他实例(进程)不受影响。...主要有两种对象可以建立这种入口点——Application() , Desktop(). Application作用范围是一个进程,如一般桌面应用程序都为此类。...Desktop作用范围可以跨进程。主要用于像win10计算这样包含多个进程程序。这种目前比较少见。

8K32

基于airtest多端大规模自动化测试实践经历

2人1天工时),因此希望得到一种技术手段,节约在大规模互动测试开销。...高兼容性 由于教师端实现并不是标准windows应用实现方法,而是通过c+nodejs再由electron做封装,因此,很多元素传统windows查找框架uiautomation不易找到,而由于客户端对...如果不是语法有问题,并且你“看起来”title写也对,那么可以在识别的时候在pywinauto底层代码里,打个断点,把所有窗口名称bytes类型打印出来看一下; pywinauto连接过程里...和传统通过元素属性查找方式不同,airtest是基于图像识别的,因此,在提高元素查找效率方面,方法也和传统有些不同;一个基本原则是,被查找元素截图,在整个画面里越独一无二,越具备特征性(图形特征性不是颜色...因此,我们可以分别对图1,图2设定指定保存目录,执行一遍后看一下,到底是对比对象出了问题,还是真的我们元素截图特征还不够。

1.2K20

PC 自动化测试入门 - pywinauto 上篇:初识

PC 自动化测试特指针对 Windows 平台应用程序进行自动化测试, pywinauto 是一款用于实现 Windows GUI 应用程序自动化测试 Python 库。...pywinauto 是一款基于 Python 开源库,用于自动化测试 Windows 平台 GUI 应用程序。它能够模拟用户键盘和鼠标操作,以及获取和修改应用程序控件属性。...pywinauto 提供了简单强大 API,使得开发人员可以轻松地编写自动化测试脚本。...Windows上支持可访问性技术列表 一旦你安装了pywinauto,第一件必要事情是确定您应用程序可以使用哪种可访问性技术(pywinauto后端)。...打印组件不匹配 使用了几个组件选择:Inspect.exe、Spy++,感觉 Inspect.exe 最好用,但组件选择和组件树不匹配,需要以打印组件树为准。

36230

pywinauto教程

3.环境检查 命令行打开python解释,运行以下代码,windows自带记事本会被启动,若无报错,则证明pywinauto已安装成功。...二、PC端元素定位工具介绍及判断backend 1.Backend判断 Pywinautobackend有两种:win32和uia,默认为win32。...2.工具介绍 Spy++ (定位元素工具(win32)) Inspect(定位元素工具(uia)) UI Spy (定位元素工具) Swapy(可简单生成pywinauto代码) 三、启动并创建一个实例对象...在pywinauto外再启动应用程序,需要sleep,等程序start 四、 窗口、对话框及控件元素定位方式 1.window,dialog定位方式 1)基于title定位 a)如何获取title?...() #此方法可返回应用软件最顶层窗口(是窗口,不是窗口弹出对话框) 注:此方法目前没有经过测试,它会返回应用程序顶级窗口,但可能不是Z-Order顶级窗口。

7.8K32

「万字进阶」深入浅出 Commonjs 和 Es Module

第二次打印 say 才看到 b.js 导出方法。 那么如何获取到 say 呢,有两种办法: 一是动态加载 a.js 方法,马上就会讲到。 二个就是如上放在异步中加载。...当我们把 myExports 对象传进去,但是直接赋值 myExports = { name:'我不是外星人' } 没有任何作用,相等于内部重新声明一份 myExports 和外界 myExports...第二种方式: module 中导入 name ,author ,say 再以相同属性名,导出。...import() 动态引入 import() 返回一个 Promise 对象, 返回 Promise then 成功回调,可以获取模块加载成功信息。...import() 返回一个 Promise ,成功回调 then 可以获取模块对应信息。name 对应 name 属性, default 代表 export default 。

3.2K31

「万字进阶」深入浅出 Commonjs 和 Es Module

第二次打印 say 才看到 b.js 导出方法。 那么如何获取到 say 呢,有两种办法: 一是动态加载 a.js 方法,马上就会讲到。 二个就是如上放在异步中加载。...当我们把 myExports 对象传进去,但是直接赋值 myExports = { name:'我不是外星人' } 没有任何作用,相等于内部重新声明一份 myExports 和外界 myExports...第二种方式: module 中导入 name ,author ,say 再以相同属性名,导出。...import() 动态引入 import() 返回一个 Promise 对象, 返回 Promise then 成功回调,可以获取模块加载成功信息。...import() 返回一个 Promise ,成功回调 then 可以获取模块对应信息。name 对应 name 属性, default 代表 export default 。

2.2K10

Java基础

反射 JAVA语言编译之后会生成一个.class文件,反射就是通过字节码文件找到某一个类、类方法以及属性等。反射机制指的是程序在运行时能够获取自身信息。...反射作用:undefined1)可以使用反射动态地创建类型实例,将类型绑定到现有对象,或现有对象获取类型undefined2)应用程序需要在运行时某个特定程序集中载入一个特定类型,以便实现某个任务时可以用到反射...存在大量自动装箱过程,如果装箱返回包装对象不是从缓存获取,会创建很多新对象,比较消耗内存。 整型包装类 valueOf 方法返回对象时,在常用取值范围内,会返回缓存对象。...=比较,Integer自动拆箱unbox,转换为普通int间比较 /** * String比较,==是引用比较,比较字符串是否相同用equals */ //引号创建一个字符串时候,首先会去常量池中寻找有没有相等常量对象...Java泛型基本上都是在编译这个层次上实现,在生成字节码是不包含泛型类型信息,使用泛型时候加上类型参数,在编译编译时候会去掉,这个过程称为类型擦除。 30.

1.3K10

PHP设计模式之装饰模式

代码可以看出,我们是一直对具体那个ConcreteComponent对象来进行包装 再往下的话其实我们是对他operation()这个方法包装了两次,每次都是在前一次基础上加了一点点东西 不要纠结于...A和B装饰added属性和方法,他们只是GoF类图中用以区别这两个装饰不是同一个东西,每个装饰都可以干很多别的事,Component对象也不一定只有operation()这一个方法,我们可以选择性去装饰对象全部或者部分方法...亲,了解下组合概念哟,我们Decorator父类里面是一个真实对象引用哦,解耦了自身哦,我们只给真实对象去做包装,您可别直接实例化装饰来直接 还是没懂?好处呢?...这时,我们可以装饰模式来对老系统短信模板进行包装。其实说简单点,我们就是装饰来做文本替换功能。好处呢?当然是可以不去改动原来模板类方法就实现了对老模板内容修改扩展等。...,这样好处就是返回对象相同抽象数据,具有相同行为属性,否则,就不是装饰之前对象,而是一个新对象了 有点不好理解没关系,我们这次例子其实也很勉强,这个设计模式在《Head First设计模式

75030

java setattribute_java – HttpSession setAttribute并不总是插入新对象「建议收藏」

我注意到HttpSession.setAttribute工作方式有所不同.在WLS10,任何已存储在某个键下对象都将被替换....WLS12HttpSession修改行为打破了这种模式 – 当会话检索对象时,我们第一步获取数据,因为当我们尝试存储更新版本时,对象未被替换....有没有办法配置WLS12c来使用旧行为,其中对象总是被HttpSession.setAttribute()替换?...类,因为当我将其包装并将包装发送到过滤器链时,我内部Weblogic类获得了ClassCastException....我还检查了Gimby建议配置选项.我找不到会议任何适用选项.我们部署到单个服务并使用内存作为会话持久性设置. 更新2016-02-03: Oracle已将错误报告关闭为“不是错误”.

39210

干货 | 看看人家那后端API接口写得,那叫一个得劲

我们看到在获得order对象之后,我们是Result构造方法进行包装赋值,然后进行返回。小伙伴们有没有发现,构造方法这样包装不是很麻烦,我们可以优化一下。...但小伙伴们有没有发现这样有几个问题: 1、每个方法返回都是Result封装对象,没有业务含义 2、在业务代码,成功时候我们调用Result.success,异常错误调用Result.failure...是不是很多余 3、上面的代码,判断id是否为null,其实我们可以使用validate做校验,没有必要在方法体做判断。 我们最好方式直接返回真实业务对象,最好不要改变之前业务方式,如下图: ?...这个和我们平时代码是一样,非常直观,直接返回order对象,这样是不是很完美。那实现方案是什么呢?...在控制类上或者方法体上加上自定义注解@ResponseResult,这样就ok了,简单吧。到此返回设计思路完成,是不是又简洁,又优雅。 这个方案还有没有别的优化空间,当然是有的。

48320

Java大型互联网公司经典面试题,论JDK源码重要性无限思考

在 Java 堆还必须包含能查找到此对象类型数据(如对象类型、父类、 实现接口、方法等)地址信息,这些类型数据则存储在方法区。...(1)使用句柄: 如果使用句柄访问方式, Java 堆中将会划分出一块内存来作为句柄池,reference 存储就是对象句柄地址,句柄包含了对象实例数据和类型数据各自具体地址信息,如图: ?...也就是说这种方法是行不通,好,那么我们今天讲到第二个知识点:反射有没有人在做这个题目的时候有没有想过反射来实现?...int包装成Integer、float包装成Float; 拆箱:和装箱相反,将引用类型对象简化成值类型数据; Integer a = 100; // 这是自动装箱 (编译调用是static Integer...也就是说-128到127直接所有值,都是从缓存获取缓存值,是什么时候放进去,是jvm启动时候就放进去了,然后分配好内存地址。 ? ?

1K10

Java岗 面试考点精讲(基础篇01期)

封装: 把描述一个对象属性和行为代码封装在一个模块,也就是一个类,属性变量定义,行为方法进行定义,方法可以直接访问同一个对象属性。 抽象: 把现实生活对象抽象为类。...: 声明方式不同:基本类型不使用new关键字,包装类型需要使用new关键字来在堆中分配存储空间; 存储方式及位置不同:基本类型是直接将变量值存储在栈包装类型是将对象放在堆,然后通过引用来使用...= expectedModCount) throw new ConcurrentModificationException(); } 解决办法:在迭代如果要删除元素的话,需要调用Iterator...HashMap迭代(Iterator)是fail-fast迭代Hashtableenumerator迭代不是fail-fast。 什么是fail-fast?...不是Runnable接口run方法。

35530

JAVA面试题全集(上)

抽象只关注对象有哪些属性和行为,并不关注这些行为细节是什么。 - 继承:继承是已有类得到继承信息创建新类过程。提供继承信息类被称为父类(超类、基类);得到继承信息类被称为子类(派生类)。...对象造型(父类型引用引用子类型对象,这样同样引用调用同样方法就会根据子类对象不同表现出不同行为)。...),int包装类就是Integer,Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。...答:通常我们定义一个基本数据类型变量,一个对象引用,还有就是函数调用现场保存都使用JVM栈空间;通过new关键字和构造创建对象则放在堆空间,堆是垃圾收集管理主要区域,由于现在垃圾收集都采用分代收集算法...最有效率方法计算2乘以8? ? 答: 2 << 3(左移3位相当于乘以23次方,右移3位相当于除以23次方)。 ? ? 数组有没有length()方法?

48710

看看人家那后端API接口写得,那叫一个优雅!

我们看到在获得order对象之后,我们是Result构造方法进行包装赋值,然后进行返回。小伙伴们有没有发现,构造方法这样包装不是很麻烦,我们可以优化一下。...但小伙伴们有没有发现这样有几个问题: 1、每个方法返回都是Result封装对象,没有业务含义 2、在业务代码,成功时候我们调用Result.success,异常错误调用Result.failure...我们最好方式直接返回真实业务对象,最好不要改变之前业务方式,如下图 ? 这个和我们平时代码是一样,非常直观,直接返回order对象,这样是不是很完美。那实现方案是什么呢?...此代码核心思想,就是获取此请求,是否需要返回值包装,设置一个属性标记。 重写返回体 ? 上面代码就是判断是否需要返回值包装,如果需要就直接包装。这里我们只处理了正常成功包装,如果方法体报异常怎么办?...在控制类上或者方法体上加上@ResponseResult注解,这样就ok了,简单吧。到此返回设计思路完成,是不是又简洁,又优雅。 总结 这个方案还有没有别的优化空间,当然是有的。

78420
领券