执行原理:

调用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. HBuilder开发APP自动登录时跳过"登录页面"

    刚接触开发公司APP项目,用HBuilder开发工具. manifest.json中的入口页面就是"登录页面",现在获取到自动登录状态是true,但是真机联调时"登录页面 ...

  2. openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控(转)

    直接上文件 nginx.conf #运行用户和组,缺省为nobody,若改为别的用户和组,则需要先创建用户和组 #user wls81 wls; #开启进程数,一般与CPU核数等同 worker_pr ...

  3. linux下svn不能连接上windows服务器:SSL handshake failed: SSL error

    在linux服务器下载https链接的svn源码时出现:SSL handshake failed: SSL error: Key usage violation in certificate has ...

  4. cvc-complex-type.2.4.a: Invalid content was found starting with element 'async-supported'. One of '{"http://java.sun.com/xml/ns/javaee":init-param}' is expected.

    第一种方案:  将  "http://java.sun.com/xml/ns/javaee"  换为  "http://java.sun.com/xml/ns/j2ee& ...

  5. 切换用户身份su与sudo

    普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将 ...

  6. js实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)【转载】

    我们或多或少都使用过各式各样的富文本编辑器,其中有一个很方便功能,复制一张图片然后粘贴进文本框,这张图片就被上传了,那么这个方便的功能是如何实现的呢? 原理分析 提取操作:复制=>粘贴=> ...

  7. 关于网上“强大的vim”矫正!!

    参考链接在这里: 强大的vim配置文件,让编程更随意 - ma6174 - 博客园, http://www.cnblogs.com/ma6174/archive/2011/12/10/2283393. ...

  8. hibernate flush clear的区别

    有的时候你执行了更新什么的操作不一定能查出来:没有保存到数据库 以下的缓存是指一级缓存,即session:默认缓存是一级缓存: flush的意思就是执行sql,但是还没有commit,没有持久化:再清 ...

  9. 什么是JIT,写的很好

    什么是JIT 一些其他解释的网站:http://www.sohu.com/a/169704040_464084 1.动态编译(dynamic compilation)指的是“在运行时进行编译”:与之相 ...

  10. centos7 增加虚拟网卡

    确认内核是否有tun模块 # modinfo tun yum install tunctl -y 如果找不到 vim /etc/yum.repos.d/nux-misc.repo [nux-misc] ...