selenium模拟事件处理
执行原理:
调用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模拟事件处理的更多相关文章
- selenium模拟浏览器对搜狗微信文章进行爬取
在上一篇博客中使用redis所维护的代理池抓取微信文章,开始运行良好,之后运行时总是会报501错误,我用浏览器打开网页又能正常打开,调试了好多次都还是会出错,既然这种方法出错,那就用selenium模 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- Selenium模拟浏览器抓取淘宝美食信息
前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...
- 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)
代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...
- 3 使用selenium模拟登录csdn
之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...
- 使用selenium模拟知网登录
之前都是用phantomjs和selenium模拟浏览器动作的,后来phantomjs不再更新,就转用chrome了 本次模拟登录的网站是中国知网http://login.cnki.net/login ...
- 使用selenium模拟登录知乎
网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...
- Python爬虫 —— 知乎之selenium模拟登陆获取cookies+requests.Session()访问+session序列化
代码如下: # coding:utf-8 from selenium import webdriver import requests import sys import time from lxml ...
- Selenium模拟登陆百度贴吧
Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...
随机推荐
- 2312--1.3.4 Prime Cryptarithm 牛式
Description 下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式. * * * x * * ------- * * * * * * ------ ...
- UNITY 多个子MESH与贴图的对应关系
多个贴图时,与子MESH一一对应,如果多了 ...还待研究如何对应
- C#使用MonoPInvokeCallback,让C直接回调C#函数
Test.mm char* TestMakeCString(NSString *str) { const char* string = [str UTF8String]; if (string == ...
- ReactiveX 学习笔记(14)使用 RxJava2 + Retrofit2 调用 REST API
JSON : Placeholder JSON : Placeholder (https://jsonplaceholder.typicode.com/) 是一个用于测试的 REST API 网站. ...
- 使用DOM的方法获取所有li元素,然后使用jQuery()构造函数把它封装为jQuery对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js字符串和控制语句
1.js的字符串 * 字符串* 字符串是js数据类型中的一种*字符串拼接:+,加号有两层含义* 1.数学中的加法运算;* 2.字符串连接,当加号的任意一边是一个字符串,那就是字符串连接的意思; < ...
- DNS泛解析配置
多个域名走同一个nginx代理服务器,多个域名如果有相同的后缀,就可以使用泛解析了,配置如下 编辑文件:/etc/dnsmasq.conf address=/aa.com/172.16.10.10 a ...
- python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)
一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...
- 清除 idea 缓存
idea最好选择 付费版本 ,稳定一点~ 不要选择社区版 1.问题使用idea启动项目时,报如下错误:Intellij Error: Internal caches are corrupted or ...
- 如何自学web安全(详细路径)
看到学习路径,收藏一下https://blog.csdn.net/q251500/article/details/79441316