执行原理:

调用ActionChains的方法时不会立即执行,会将所有的操作按顺序存放在一个队列里,当调用perform()方法时,从队列中的事件会依次执行。

支持链式写法或者是分布写法。

鼠标键盘方法列表:

perform() 执行链中的所有动作

click(on_element=None) 单击鼠标左键

context_click(on_element=None) 单击鼠标右键

move_to_element(to_element) 鼠标移动到某个元素

ele.send_keys(keys_to_send) 发送某个词到当前的焦点元素

—————————————— 不常用的————————————

click_and_hold(on_element=None) 单击鼠标左键不松开

release(on_element=None) 在某个元素位置松开鼠标左键

key_down(value, element=None) 按下某个键盘上的键

key_up(value, element=None) 松开某个键

drag_and_drop(source, target) 拖拽到某个元素然后松开

drag_and_drop_by_offset(source, xoffset, yoffset)  拖拽到某个坐标然后松开

move_by_offset(xoffset, yoffset) 鼠标从当前位置移动到某个坐标

move_to_element_with_offset(to_element, xoffset, yoffset) 移动到距某个元素(左上角坐标)多少距离的位置

鼠标的事件hover菜单栏弹出

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/4 22:00'
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.action_chains import ActionChains drive = webdriver.Chrome()
drive.get('https://xdclass.net')
sleep(2)
# 定位鼠标移动到上面的元素
menu_list = drive.find_element_by_css_selector('#banner_left_ul > a:nth-child(1) > li')
ActionChains(drive).move_to_element(menu_list).perform() # 对定位到的元素选中吧子菜单
sub_menu_list = drive.find_element_by_css_selector('#active > div.des_top > div.des_one > div.des_text > a:nth-child(1)')
sleep(3)
sub_menu_list.click()

网页等待时间

等待时间的选择方式

1,强制等待,用time.sleep()方法,一般自己调试使用

2,drive.implicitly_wait(10)

隐性等待,设置一个最长等待时间,如果规定时间内加载完成,执行下一步,否则一直等待到时间截止,才会执行下一步操作,弊端是程序会一直等待整个页面的加载完成,到浏览器标签栏的加载圈不在转圈

注意:对driver起作用,使用仅仅需要设置一次即可,没有必要到处设置。

3,显性等待,WebDriverWait需要配合

until和until_not,程序每隔N秒检查一次,如果成功,执行下一步,否则继续等待,直到超出最长设置时间,

from selenium.webdriver.support.wait import WebDriverWait

语法:WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

首先导入:

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

上代码

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/5 20:02'
# 网页等待时间 from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 上方是显性等待需要导入的
from selenium import webdriver
import time driver = webdriver.Chrome()
driver.get('https://baidu.com')
# 强制睡眠
time.sleep(10)
# 隐性等待,全局设置一次
driver.implicitly_wait(10)
# 显性等待
try:
ele = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
# 5代表最大等待时间,每0.5s检查一次,直到找到ID为kw,找不到就会抛异常
except:
print('加载失败,一般发送一个邮件或者短信')
finally:
print('不管成功与否,都打印,用于资源清理')
driver.quit()

注意:隐性等待和显性等待可以同时出现,设置超时时间不同会按照最大的等待时间来确定!

弹窗的常用方法:

自动化测试页面常见的弹窗处理

简介:讲解使用selenium处理页面弹窗,alert和comfirm

常见方法:(需要先切换窗口 switch_to_alert())

accept() 接受

dismiss() 取消

# -*- coding:UTF-8 -*-
__autor__ = 'zhouli'
__date__ = '2018/11/6 20:11' from selenium import webdriver driver = webdriver.Chrome()
driver.get('************0')
driver.find_element_by_id('wd').click()
# 切换窗口
win_alert = driver.switch_to.alert()
win_alert.accept()

selenium模拟事件处理的更多相关文章

  1. selenium模拟浏览器对搜狗微信文章进行爬取

    在上一篇博客中使用redis所维护的代理池抓取微信文章,开始运行良好,之后运行时总是会报501错误,我用浏览器打开网页又能正常打开,调试了好多次都还是会出错,既然这种方法出错,那就用selenium模 ...

  2. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  3. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  4. 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)

    代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...

  5. 3 使用selenium模拟登录csdn

    之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...

  6. 使用selenium模拟知网登录

    之前都是用phantomjs和selenium模拟浏览器动作的,后来phantomjs不再更新,就转用chrome了 本次模拟登录的网站是中国知网http://login.cnki.net/login ...

  7. 使用selenium模拟登录知乎

    网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...

  8. Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化

    代码如下: # coding:utf-8 from selenium import webdriver import requests import sys import time from lxml ...

  9. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...

随机推荐

  1. android除去标题栏或全屏

    想要除去标题栏只要加上下面两句代码在Activity的onCreate方法中即可(要在setContentView之前添加). requestWindowFeature(Window.FEATURE_ ...

  2. UI5-学习篇-18-云端UI5应用部署到Fiori Launchpad

    UI5应用发布SCP 选择UI5应用项目,右键 Deploy - Deploy to SAP Cloud Platform 输入云平台子账号,项目名称,应用名称,如下图所示: 点击Open the r ...

  3. Linux性能测试分析命令_sar

    sar主要用于收集并统计系统资源的信息,包括CPU.IO.内存.网卡流量等. sar语法 用法:sar [ 选项 ] [ <时间间隔> [ <次数> ] ] 常用选项说明: - ...

  4. [ 测试思维 ] 启发式测试策略模型(HTSM)

    什么是HTSM 启发式测试策略模型(Heuristic Test Strategy Model,简称HTSM)是测试专家James Bach提出的一组帮助测试设计的指南(Guide line).HTS ...

  5. centos中Mysql数据库导入sql文件

    1.对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库. mysql>create database Student; 2.切换到需要导入sql文件的数据库 mysql ...

  6. 遍历DOM树,过滤节点

    jQuery还提供以下方法来过滤节点.  方法  说明  first()  获取第一个,示例 $('li').last()  last()  获取最后一个,示例$('li').last()  eq() ...

  7. 浅谈MySQL事务及隔离级别

    目录 1.什么是事务 2.事务的ACID属性 2-1.原子性(Atomicity) 2-2.一致性(Consistency) 2-3.隔离性(Isolation) 2-4.持久性(Durability ...

  8. css美化select标签,兼容ie10 ie10+,chrome。但不支持ie9 ie9-

    让ie9 ie9+ 和非ie的浏览器加载这个hack.ie8,ie8- 就用自己的默认样式 <!-- email:416960428@qq.com author:李可 --> <!- ...

  9. replace()方法解析

    search(),match(),用于查找指定字符串返回首次出现的索引值与指定的字符串.这篇我们讲找到指定字符串之后将其替换掉.直接贴: var str="Visit Microsoft!& ...

  10. Hibernate 再接触 Hello world 模拟Hibernate

    没有Hibernate以前 Cilent 客户端 new出一个对象 然后执行JDBC 然后这样的访问数据库并不是面向对象语言 使用Hibernate以后 Cilent new 出一个对象后 访问配置文 ...