侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python+selenium实现登录账户后自动点击的示例

Python  /  管理员 发布于 7年前   268

公司在codereview的时候限制了看代码的时间,实际上不少代码属于框架自动生成,并不需要花费太多时间看,为了达标,需要刷点时间(鼠标点击网页固定区域)。我想到可以利用自动化测试的手段完成这种无效的体力劳动。

首先,明确一下需求:   

  1. 自动打开网页   
  2. 登陆账号 
  3. 每隔一定时间点击一下固定区域

我想到的方案有两个,sikuli或者python+selenium。sikuli的优点是逻辑操作简单直接,使用图片作为标示,缺点是需要窗口固定,并且无法后台运行。selenium稍复杂一定,但是运行速度快,窗口可以遮挡。

这里简单记录一下使用Python+selenium的小例子。

使用的版本为Python3.3以及selenium2,Windows环境(现在已经支持3.0以上的了,多处论坛博客没有更新)。

首先是软件的安装,Python不赘述了,记得设置环境变量。

下面安装selenium,如果已经安装过pip。直接运行一下命令。

pip install -U selenium

另一种方式,https://pypi.python.org/packages/source/s/selenium/selenium-2.52.0.tar.gz下载并解压。这里简述一下windows版本,其实Unix下也差不多,使用Wget下载一下安装。

使用命令(setup一般用于第三方模块的安装):

cd c:\Python3\xxxxpython setup.py install

安装过程中可能会出现ImportError: No module named setuptools,这是因为缺少setuptools模块,Python默认不安装。

在http://pypi.python.org/pypi/setuptools上面提供了各系统的安装包和安装指南,对于Windows系统,下载https://bootstrap.pypa.io/ez_setup.py自动化安装脚本。

运行:

python ez_setup.py

完成后再安装selenium即可。

这里用我自己的实例简单的讲解一下流程。

第一步先完成打开浏览器。

selenium2结合了selenium和webdriver,直接引入各个浏览器相应的驱动,打开即可,注意chrome驱动可能需要另行安装。

from selenium import webdriverbrowser = webdriver.Firefox()browser.get('https://www.xxx.com')

打开网页后需要登录,F12打开浏览器调试器,小箭头选取元素,查看登录框账号和密码的属性,一般都有ID。selenium可以通过以下各个方法获取元素并进行各种操作,具体解释请看上方链接文档:

  1. find_element_by_id
  2. find_element_by_name
  3. find_element_by_xpath
  4. find_element_by_link_text
  5. find_element_by_partial_link_text
  6. find_element_by_tag_name
  7. find_element_by_class_name
  8. find_element_by_css_selector

其中id最为有效方便,优先考虑。选取完元素之后可以通过WebDriver API调用模拟键盘的输入和鼠标的点击操作。代码如下:

username="qun" passwd="passwd"browser = webdriver.Firefox()browser.get('https://www.xxx.com')browser.implicitly_wait(10)elem=browser.find_element_by_id("loginFormUserName")elem.send_keys(username)elem=browser.find_element_by_id("loginFormPassword")elem.send_keys(passwd)elem=browser.find_element_by_id("loginFormSubmit")elem.click()

一般登录之后页面都会跳转到新的网页上,如何获取新的网页呢?这里有个窗口句柄的概念,通过切换窗口句柄来完成。注意!有时候元素在一个frame里面的时候,也需要通过swtich切换。这里出现一个wait函数(上面也有),是因为页面加载需要时间,很可能在点击之后元素才加载出来,下一节详细解释一下wait。

browser.implicitly_wait(10)browser.switch_to_window(browser.window_handles[-1])

之后选取需要点击的区域,这里使用 xpath定位,因为在自动化测试的过程中,很有可能元素无法通过id,name等方法定位(不少人就是不写,爱table套table,我也么办法),xpath就有了用武之地。常用的偷懒方法是Firefox安装xpath插件,右键直接获取。这里不介绍,因为不提倡,使用插件会造成代码里充斥这样的东西:   

XPath(/html/body/div/div[3]/div[2]/div[4]/p[2])

不到万不得已,尽可能使用元素的特征来定位,比如按钮的name。

或者通过父元素定位子元素。

username =browser.find_element_by_xpath("//input[@name='username']")clear_button = browser.find_element_by_xpath("//form[@id='loginForm']/input[4]")

代码如下,网上经常出现的By的用法需要引入包。

from selenium.webdriver.common.by import By

这里使用另外一个函数,我不知道有什么区别- -。

for i in range(100):  elem=WebDriverWait(browser, 30).until(    lambda x:x.find_element_by_xpath("//table[@class='aaa']"/td[1]))  elem.click()  time.sleep(20)  print ("click",i)

然后这里还要提一下wait函数,在selenium2中延迟等待分为两种,显示等待和隐式等待。  

显示等待

显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception。

element = WebDriverWait(driver, 10).until(    EC.presence_of_element_located((By.ID, "myDynamicElement"))  )

隐式等待

注意,隐式等待是告诉设置所有dom元素在寻找某个元素的时候,如果没立即找到,再尝试这么长时间。

browser.implicitly_wait(10) # seconds

两者的区别在于一个是自己直接管理超时对象,一个是交给webdriver去做。

当然也可以用休眠的方法干等。记得引入time包。

time.sleep(20)

这里只是简单的演示一下用法,有许多可以改进的地方,没有封装函数,么有使用多线程并发执行多个例程。以后有需求再改进。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Python机器学习之决策树算法
    下一条:
    python实现决策树
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中实现字符串可逆性压缩及解压缩功能(0个评论)
    • 使用go + gin + jwt + qrcode实现网站生成登录二维码在app中扫码登录功能(0个评论)
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客