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 ...
随机推荐
- APP-5-百度电子围栏
1.代码部分 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <me ...
- pod install vs pod update
Podfile文件,Podfile.lock文件 Podfile文件:指定依赖库的版本规则 Podfile.lock文件:记录当前工程中使用的依赖库的版本号 pod install会去安装podfil ...
- js判断网页是否加载完毕
1. document.onreadystatechange = function () { if(document.readyState=="complete") { docum ...
- python实现Excel删除特定行、拷贝指定行操作
工作中遇到的,本来用VBA写的,操作很慢,尝试用Python实现, 任务需求: 从原始的两张表中拷贝行到五张表中,如下表所示: source1和source2是一样的格式: one t ...
- python实现根据文件关键字进行切分为多个文件
来源:在工作过程中,需要统计一些trace信息,也就是一些打点信息,而打点是通过关键字进行的,因此对一个很大的文件进行分析时,想把两个打点之间的内容单独拷贝出来进行分析 #!/usr/bin/env ...
- it工程师常用英文自我介绍常用用语
Good morning ! It is really my honor to have this opportunity for an interview, I hope i can make ...
- git-04 同意分支合并
https://blog.csdn.net/boysky0015/article/details/78185879/
- Visual studio 2019 preview & C# 8 initial experience
Visual studio 2019 preview & C# 8 initial experience using System; using static System.Con ...
- C#自制Web 服务器开发:用C#开发自己的Web服务器
当输入: GET / HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: zh-CN User-Agent: ...
- SQL中ISNULL的问题。
今天在写SQL代码的时候写了个 ISNULL(变量1,变量2),返回的结果居然是 "*" ,这个星号,郁闷了很久. 代码大意如下: ) declare @str2 int sele ...