Skip to content

简单实现python自动化 #49

@john5480

Description

@john5480

简单实现python自动化
之前自己是有一个功能需求,想借助自动化来实现,就去了解了一下,发现这东西其实非常简单,但是实现后的效果,看着它自己在那里操作的过程感觉很有趣,就打算以社区签到的为例分享给大家。我们都知道python的自动化可以模拟浏览器的交互操作,所以运行之后就如同播放动画一般,你只需要看着这一系列的动作在你眼前演示完成,以社区签到为例:运行脚本之后,你会看见这样一幅美好的画面,浏览器自动弹出,浏览器自己打开了登录页面,自动输入了用户名口令完成登录,然后它打开安全社区的网页,点击签到,最后浏览器自己关闭了。(本来打算把这个过程录屏为flash的,可惜hi3好像不支持,所以只能自行脑补了,下文中附上脚本代码运行即可)。在了解的过程中,发现python自动化多应用于自动化测试,十一假期不是马上就要来了么,每次放假最头疼的莫过于抢火车票了,当然可以借助自动化替你完成,我之前看也早有同事分享过自动化抢票,实现也非常简洁,所以说自动化可以发挥你的想象,实现一些你的功能需求,以一个生动的小例子开启python自动化的大门。

自动化完成社区签到的小例子分享(你会发现,想get到,环境搭好后也只是分分钟的事~)
温馨小提示:签到的小例子在此仅作为引子,作为社区铁粉们,还是不建议大家用该种方式进行签到,目的希望更多人了解自动化的过程与实现,并在有相关自动化需求时,去更广的应用和实现。

准备工作

一、搭建环境(注:python基础环境必须)
1)主要用到的自动化利器:splinter和selenium(见附件或自行下载)
下载地址:
https://pypi.python.org/pypi/splinter/
https://pypi.python.org/pypi/selenium
如果只安装了splinter,运行是会报错,提示必须要安装selenium(安装方法见文末附录1)。
2)根据自己的习惯选择浏览器驱动,包括firefox和chorme浏览器的(见附件或自行下载,浏览器驱动的安装使用方法见文末附录2,)
下载地址:
firefox:https://github.com/mozilla/geckodriver/releases
chorme:http://chromedriver.storage.googleapis.com/index.html?path=2.30/
备注:如果下载的浏览器启动版本跟自己正在使用的浏览器版本不匹配,测试打开chrome浏览器时,会弹出来chromedriver.exe已停止工作的错误
通过修改下载地址中的path参数,可以下载到对应版本的驱动(当前附件中提供的是v2.30对应的chrome版本是v58-60)
关于查看版本之间对应关系的传送(由于有些同事不可以打开连接,将如何查看当前自己已安装的chrome版本以及驱动对应关系附在文末,可见文末):
http://3ms.huawei.com/km/blogs/details/5084655
3)编写自己的测试脚本(脚本见附件SignAutomation.zip)
这里我们写了一个自动化完成社区签到的,可以看到非常简单,主要使用的是splinter,贴出来,供大家搭建好环境好,直接运行测试使用:

-Python 代码

# -*- coding: utf-8 -*-

# 自动打开w3登录页面 输入用户名密码 点击登录 登录后再打开社区 自动点击签到按钮 签到完成 退出当前浏览器

from splinter.browser import Browser
import time


def sign(mode):
    targeturl = "http://3ms.huawei.com/hi/group/2034125"
    login_url = "https://login.huawei.com/login/"
    browser = Browser('chrome')
    username = u"U-W3-PID"  # 此处内容替换为你的域账号:姓氏首字母+工号
    # 开启自动输入用户密码时,需要填入密码
    password = u"U-W3-PWD"  # 密码
    browser.visit(login_url)
    browser.fill('uid', username)
    time.sleep(1)
    if mode == 0:
        print u"等待输入密码,自行输入..."  # 自行输入密码,只需输入密码,不需手动点击登录框,由自动化完成点击登录
        time.sleep(10)
    else:
        browser.fill('password', password)  # 由自动化脚本自动输入密码
        time.sleep(3)
    browser.find_by_name('Submit').click()
    time.sleep(3)
    browser.visit(targeturl)
    time.sleep(3)
    scores = browser.find_by_id('communityScores').text
    print u"签到前社区积分:%r" % scores
    time.sleep(3)
    browser.find_by_id('sign').click()
    time.sleep(3)
    print u"签到后社区积分:%r" % scores
    browser.quit()


if __name__ == "__main__":
    mode = 0  # 是否开启自动输入密码模式,为0是自行输入
    sign(mode)

代码实现中的几个小小的注意点:
在运行脚本之前,记得先在脚本中填入自己的w3域账号哦,然后在设置自己想要的登录模式,medo值为非0如1时,记得在脚本中填入自己的域口令,再运行

  1. 自动化打开的浏览器是由浏览器驱动打开的,是一个完全空白的,会弹出来需要输入域账号和口令先登录,而hi3是使用的w3的登录接口,当前我们的实现是先登录w3,再打开社区
  2. 完成登录,代码中实现了2种登录模式,当登录模式mode赋值为0,则浏览器自动输入用户名之后,会等待,等待我们自行输入口令,此时只需输入我们的口令,不需手动点击登录按钮,等待登录按钮自行触发即可。由于手工输入可能需要的时长稍久一点,所以我们设置需等待10s
  3. 如果mode值不为零,则为完全自动化,这种情况需要你将你的口令赋值到脚本中,可能有些人不想输入到脚本中,所以提供了2中的登录模式,由于我们只是为了简单实例完成自动化体验,所以在此处没有做过多的实现,待有兴趣的同事可以完善研究一下

附:
1)安装方法(该安装方法需要python先安装setuptools包):
splinter和selenium两者的安装方法一样,这里仅以splinter为例:
打开命令窗口,并进入到Splinter解压缩之后所在的目录:f:\ruanjian\splinter-0.7.6\splinter-0.7.6
输入安装命令:python setup.py build

完成之后再次输入命令:python setup.py install
完成安装之后,在python模式下,输入命令:from splinter.browser import Browser
如果没有报错,则说明安装成功

可以看到报了一个错误,是因为我们还没有安装selenium
同样的安装方法安装完成selenium之后,就可以运行splinter了
再次进入python模式,输入测试命令,可以看到不再报错,说明以上两个软件都以成功安装

2)接下来安装浏览器启动,将下载好的firefox和chorme浏览器的驱动解压,将解压得到的两个exe文件复制到python的安装根目录下,与python.exe同一目录,如果不是这样就需要设置环境变量

测试,继续在命令窗口中,之前的python模式下输入:browser = Browser
默认缺省没有指定要使用的浏览器时,默认打开的将会是firefox

没有报错说明安装成功,当前环境已经搭建好了
测试打开chorme

输入后自动打开了chorme,说明安装成功
3)弹出来chromedriver.exe已停止工作的错误的解决方案
根因:chromedriver和chrome的版本不匹配导致的
查看我们当前主机安装的chrome版本信息
在chrome浏览器中键入:chrome://version

可以查看我们当前安装运行的是59,然后找到对应的chromedriver版本

需要下载chrome v2.30以上的

访问下载链接:
http://chromedriver.storage.googleapis.com/index.html?path=2.30/
可以看到通过path参数的修改可以下载到我们想下载的对应版本的chrome驱动

附:chromedriver与chrome的对应关系

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions