很高兴遇见你😄欢迎来看我随手写的小Demo
闲来无事,写了三个小Demo,主要用到Python和Selenium,下面是相关版本信息。
软件名称 | 版本信息 |
---|---|
Python | 3.8 |
Selenium | 3 |
需要注意Selenium2和Selenium3之间,有些方法使用上存在这差异,比如切换窗口的方法。
Selenium2 | Selenium3 |
---|---|
switch_to_alert() | switch_to.alert.accept() |
switch_to_window() | switch_to.window() |
三个demo分别是:
- 使用新浪微博登录百度,并进入贴吧发帖子;
- 爬取图片网站的图片,并下载到指定文件夹中;
- 登录小说网站,根据我们需求输入名称,想看的章节,并下载该章节;
我写demo使用的框架主要思想是把逻辑层和数据层分离,通用的方法写一个基类,写业务流程的时候只要继承基类,根据步骤调用基类里的方法,这样可以减少大量重复的代码的敲打。而且相对容易维护,出错也容易定位。
工具类的方法单独放到utis文件夹中。数据也可以分离出来,只要把流程逻辑写好,所有的数据按类写进配置文件里并向逻辑层传参即可。报告自动在reports文件夹内生成。还有日志打印。说到日志,很尴尬😒我写的demo存在健壮性问题,还需要针对健壮性进一步优化。脑海中构思了一些功能emmmm...随手写的,后续看情况会添加的。
万变不离其宗,移动端的自动化或者接口自动化都可以用类似的方法框架。monkeyrunner和Appium的代码看过,其实和Selenium的主要思想是相通的。掌握一种可以很快入手其他的工具。比喻的话,python是大脑,工具是四肢。
一直有个想法,利用django把网页、移动端、接口自动化集成。把所有方法二次封装,不需要写一大堆的代码,方便其他不会编码人员使用。
在该demo中,我使用PO模型。pagedemo1目录下baidupage.py写的是整个操作逻辑代码,在根目录下runbaidu.py则根据业务调用page页面的代码,并传入参数,实现数据与业务逻辑层分离。在runbaidu.py代码与unittest单元测试模块结合,并在reports目录下生成报告。
登录百度我用是新浪微博登录,打开的是新窗口,注意窗口切换即可。需要注意,我留出来了更改帐号密码的入口。可以在data文件夹下的baidu.ini里进行配置。配置方法如下:
#在写帐号密码的时候,不要加任何单引号或者双引号
#至于安全您可放心,并不会窃取,可看代码检验
[account]
username=yourname
password=123456
主流程:
- 打开百度页面;
- 鼠标移动到设置,进行调整并保存设置;
- 点击关闭保存弹窗;
- 点击登录;
- 选择新浪登陆;
- 切换到弹出的新浪登陆窗口;
- 输入帐号密码并确认;
- 切换到百度初始页面(已登录状态);
- 点击贴吧进入;
- 输入‘python’,进入python吧;
- 选择置顶帖子进入;
- 弹出窗口要求输入内容;
- 输入完内容确定,自动发帖,并关闭当前页面;
- 最后关闭driver。
其实,这个属于半自动,在发帖的时候,我使用GUI弹窗要求输入内容。这样的用意是不想固定回复的内容。
爬图片是很简单的,需要用requests库、parsel库。
requests库不需要多做介绍,parsel库在 页面元素定位相当好用的模块。
而且,使用方法也简单易学。主要用到css定位、xpath定位和正则。
爬小说和图片都是类似的,只是,爬小说的时候我做了弹窗处理。在搜索指定章节的时候,使用link_text()方法不易定位到元素,很不稳定。个人还是喜欢使用css,速度快效率高。搜索指定章节偏大的话,循环查找时间也是问题。不过,简单的实现了搜索功能。最好是可以把所有的章节的标题和连接、内容保存到数据库中,搜寻的速度嗖嗖的。在代码健壮性方面还需要做优化。主流程:
- 打开小说网站;
- 弹窗提示输入搜索小说名称;
- 点击搜索;
- 进入小说详情页;
- 弹窗提示要看最新的章节还是指定章节,或者退出;
- 选择后进入章节页;
- 切换窗口;
- 下载当前小说内容到指定文件夹中;
- 关闭页面;
- 退出driver。