1.解析WebWxApp代码来增强wechaty功能(一)
2.selenium用法详解从入门到实战Python爬虫4万字
3.Selenium基础 — 浏览器弹窗操作
4.两招,码解帮你解决网页弹出框问题
解析WebWxApp代码来增强wechaty功能(一)
通过解析WebWxApp与wechaty代码,码解成功为wechaty增加新特性,码解本文回顾了菜鸟如何着手解决github上提出的码解issue #,即无法使用MediaMessage发送PDF文件,码解以及陆续提交的码解深圳直播系统源码多个pr来增强wechaty功能的过程。在这一过程中,码解阅读WebWxApp及wechaty的码解源码,了解其功能结构与typescript知识显得尤为重要。码解
在wechaty V0.8.x版本中,码解通过阅读webwxapp中相关代码逻辑结构与流程,码解实现并完善了发送不同文件类型、码解转发消息以及处理撤回消息等功能。码解需要注意的码解是,webwxapp并未对所有事件和信息进行同等处理,码解某些特性wechaty默认捕捉不到,如RECALLED类型消息,因此必须深入阅读webwxapp源码,梳理其代码流程,找到解决问题的切入点。
wechaty设计采用分层、抽象化封装的方式,其中puppet功能通过浏览器驱动(selenium-webdriver、柒牌源码puppeteer)创建浏览器环境,加载WebWxApp,并通过websocket与wechaty进行通讯。为了操作webWxApp,需要将js代码注入web环境执行,确保操作的同步性。在wechaty中,信息发送会经过一系列步骤,最终在webWxApp与wechaty之间完成。
为了实现发送文件、消息转发、处理撤回消息等功能,需要深入了解wechaty-bro中如何监听webWxApp事件,通过websocket将事件信息发送给puppet-web,以及如何通过浏览器驱动执行js代码以操作webWxApp。例如,在wechaty中发送一条信息时,会按照特定顺序执行一系列操作,涉及获取功能模块、监听事件、执行操作等步骤。
通过分析webWxApp代码,KMPLAY源码输出发现messageProcess()方法中对RECALLED事件的处理方式与其他类型信息不同,导致wechaty无法捕捉到此类事件。为解决此问题,可以通过hook t._recalledMsgProcess()方法来获取RECALLED事件信息,分析_recalledMsgProcess()方法,解析撤回信息内容,并通过websocket发送给puppet-web。
最终,通过一系列代码实现,成功解决了无法发送PDF文件、消息转发、处理撤回消息等问题,为wechaty增添了新功能。这一过程不仅加深了对WebWxApp与wechaty代码的理解,也展示了在实际项目中通过阅读和解析代码解决技术难题的重要性。
selenium用法详解从入门到实战Python爬虫4万字
为了获取实战源码与作者****,共同学习进步,请跳转至文末。 Selenium是一个广泛使用的开源 Web UI 自动化测试套件,支持包括 C#、Java、Perl、koparion网站源码PHP、Python 和 Ruby 在内的多种编程语言。在 Python 和 C#中尤其受欢迎。Selenium 测试脚本可以使用任何支持的编程语言进行编写,并能在现代浏览器中直接运行。 安装步骤:打开命令提示符,输入安装命令并执行。使用 pip show selenium 检查安装是否成功。接着,针对不同的浏览器安装相应的驱动程序。例如,为 Chrome 安装驱动需要找到对应版本的链接并下载。下载完成后,将 chromedriver.exe 文件保存到任意位置,并确保其路径包含在环境变量中。 定位页面元素:首先通过浏览器的开发者工具查看页面代码,从而定位所需元素。使用 webdriver 打开指定页面后,可以通过多种方法定位元素。例如,利用元素的 id、name、lua源码githubclass、tag、xpath、css、link 和 partial_link 等属性进行定位。 浏览器控制:使用 webdriver 可以调整浏览器窗口大小、执行前进和后退操作、刷新页面以及切换到新打开的窗口。这些操作有助于更好地控制和管理浏览器会话。 常见操作:包括搜索框输入、搜索按钮点击、鼠标事件(如左键单击、右键单击、双击和拖动)、键盘输入等。这些操作覆盖了用户界面的基本交互。 元素等待:当页面元素加载延迟时,可以使用显式等待或隐式等待来确保元素存在后再执行后续操作。显式等待允许用户指定等待时间,并在该时间内检查元素是否存在。隐式等待则为整个浏览器会话设置了一个全局等待时间。 定位一组元素:使用 elements 而不是 element 来定位一组元素,适用于需要批量操作的场景。 窗口切换:在操作多个标签页或窗口时,使用 switch_to.windows() 方法来切换到目标窗口,确保正确的元素被操作。 表单切换:针对嵌套的 frame/iframe 表单,使用 switch_to.frame() 方法进行切换。 弹窗处理:使用 switch_to.alert 来处理 JavaScript 弹窗,通过调用相应方法处理确认、取消或输入文本。 上传和下载文件:通过 send_keys 方法上传文件,下载文件则需在 Chrome 浏览器中通过特定选项实现。 cookies 操作:通过 webdriver 提供的 API 读取、添加和删除 cookies,用于模拟用户登录状态。 调用 JavaScript:使用 execute_script 方法执行 JavaScript 代码,如滚动页面或向文本框输入文本。 其他操作:包括关闭所有页面和当前页面、对页面进行截图等。 Selenium 进阶:通过使用 stealth.min.js 文件隐藏指纹特征,以提高模拟浏览器的逼真度,从而更好地应对网站的反爬虫机制。 实战案例:使用 Selenium 模拟登录 B 站,并处理登录所需的验证码,通过调用第三方平台如超级鹰实现验证码的自动识别。最终,通过精确点击坐标完成登录过程。 为了获取实战源码与作者****,请点击文末链接。Selenium基础 — 浏览器弹窗操作
说明:在webdriver中,处理JavaScript生成的alert、confirm以及prompt弹窗非常简单。具体方法是通过switch_to.alert()方法定位到alert/confirm/prompt弹窗,然后使用text/accept/dismiss/send_keys方法进行操作。常用操作有:
示例:页面代码片段:
脚本代码:
注意:prompt弹窗输入框,Chrome不显示输入文本 Python版本 3.7.7
由于alert弹窗不够美观,现在大多数网站都会使用自定义弹窗。使用Selenium自带的方法无法处理这种情况,此时就需要使用JS方法进行处理。需求:去掉淘宝首页的自定义弹窗。淘宝首页的自定义弹窗如下:
提示:网页中弹出的对话框,也属于页面自定义弹窗,都可以用下面方式处理。实现方式:这种弹窗属于自定义弹窗的表现形式,可以通过设置HTML、DOM、Style对象中的一个display属性来处理,可以设置元素如何被显示。具体解释可以参考:/jsref/prop_style_display.asp。将display的值设置成none:此元素不会被显示,就可以去除这个弹窗了。注意:手动页面刷新之后还会出现弹窗。步骤如下:
提示:document.getElementById()是JS获取元素的方式,在JS获取元素方式中,只有ById()获取的是一个元素。其他获取元素的方式,都获取的是结果集,需要获取具体元素的时候,注意要使用索引。简单举例:
示例:
最后我这里给你们分享一下我所积累和真理的文档和学习资料,有需要是领取就可以了。
这个大纲涵盖了目前市面上企业百分之的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习。
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。
软件测试/自动化测试全家桶装学习中的工具、安装包、插件....
有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看。
如何领取这些配套资料和学习思路图,以及项目实战源码。这些资料都已经让我准备在一个php网页里面了,可以在里面领取扫码或者进Q群交流都可以暗号和备注是哦。
最后送上一句话:世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦。
两招,帮你解决网页弹出框问题
自动化中,最常遇到的表单元素,alert提示框估计是最常用的,如果登录密码错误,会弹出一个对话框提示你,用户名或者密码错误。添加
某个用户成功后,也会出现一个提示框提示你。
那么,我们在selenium中如何处理alert的呢?
提示框常用的有二种:
1、只有一个确定按钮。
2、有两个按钮,分别是确定与取消。
alert弹出框源代码
下面直接用代码给大家演示一下如何处理alert提示框
#点击弹出对话框确定按钮
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("D:\\yuangbao\\bao1\\test1.html")
driver.maximize_window()
driver.find_element_by_name("button").click()
#点击弹出对话框确定按钮
driver.switch_to.alert.accept()
#点击弹出对话框取消按钮
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("D:\\yuangbao\\bao1\\test1.html")
driver.maximize_window()
driver.find_element_by_name("button").click()
#点击弹出对话框取消按钮
driver.switch_to.alert.dismiss()