六、Selenium操作指南(三)

七、模拟鼠标操作

既然是模拟浏览器操作,自然也就需要能模拟鼠标的一些操作了,这里需要导入ActionChains 类。

(一)左键 click()

这个其实就是页面交互操作中的点击click()操作。

(二)右键 context_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 定位到要右击的元素,这里选的新闻链接
right_click = browser.find_element_by_link_text('新闻')
 
# 执行鼠标右键操作
ActionChains(browser).context_click(right_click).perform()
time.sleep(2)
 
# 关闭浏览器
browser.close()
ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入
context_click(right_click):模拟鼠标双击,需要传入指定元素定位作为参数
perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作

(三)双击 double_click()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
browser.get(r'https://www.baidu.com')  
time.sleep(2)
 
# 定位到要双击的元素
double_click = browser.find_element_by_css_selector('#bottom_layer > div > p:nth-child(8) > span')
 
# 双击
ActionChains(browser).double_click(double_click).perform()
time.sleep(15)
 
# 关闭浏览器
browser.close()

(四)拖拽 drag_and_drop(source,target)

开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)  
time.sleep(2)
 
browser.switch_to.frame('iframeResult')
 
# 开始位置
source = browser.find_element_by_css_selector("#draggable")
 
# 结束位置
target = browser.find_element_by_css_selector("#droppable")
 
# 执行元素的拖放操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
# 拖拽
time.sleep(15)
 
# 关闭浏览器
browser.close()

(五)悬停 move_to_element()

from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time  
 
browser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)  
time.sleep(2)
 
# 定位悬停的位置
move = browser.find_element_by_css_selector("#form > span.bg.s_ipt_wr.new-pmd.quickdelete-wrap > span.soutu-btn")
 
# 悬停操作
ActionChains(browser).move_to_element(move).perform()
time.sleep(5)
 
# 关闭浏览器
browser.close()

在这里插入图片描述

八、模拟键盘操作

selenium中的Keys()类提供了大部分的键盘操作方法,通过send_keys()方法来模拟键盘上的按键。
引入Keys类:

from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)

send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)

send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)

send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

.....

send_keys(Keys.F12):键盘F12

(一)send_keys

from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import time
 
browser = webdriver.Chrome()
url = 'https://www.baidu.com'
browser.get(url)  
time.sleep(2)
 
# 定位搜索框
input = browser.find_element_by_class_name('s_ipt')
# 输入python
input.send_keys('python')
time.sleep(2)
 
# 回车
input.send_keys(Keys.ENTER)
time.sleep(5)
 
# 关闭浏览器
browser.close()

九、延时等待

如果遇到使用ajax加载的网页,页面元素可能不是同时加载出来的,这个时候尝试在get方法执行完成时获取网页源代码可能并非浏览器完全加载完成的页面。所以,这种情况下需要设置延时等待一定时间,确保全部节点都加载出来。
三种方式可以来玩玩:强制等待、隐式等待和显式等待。

(一)强制等待

就很简单了,直接time.sleep(n)强制等待n秒,在执行get方法之后执行。

(二)隐式等待

implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常。

from selenium import webdriver
 
browser = webdriver.Chrome()
 
# 隐式等待,等待时间10秒
browser.implicitly_wait(10)  
 
browser.get('https://www.baidu.com')
print(browser.current_url)
print(browser.title)
 
# 关闭浏览器
browser.close()

(三)显式等待

设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
 
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
# 设置等待时间10s
wait = WebDriverWait(browser, 10)
# 设置判断条件:等待id='kw'的元素加载完成
input = wait.until(EC.presence_of_element_located((By.ID, 'kw')))
# 在关键词输入:关键词
input.send_keys('Python')
 
# 关闭浏览器
time.sleep(2)
browser.close()

(四)WebDriverWait的参数说明

WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)

driver: 浏览器驱动

timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)

poll_frequency: 每次检测的间隔时间,默认是0.5秒

ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常

until(method,message='')

method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False

message: 如果超时,抛出TimeoutException,将message传入异常

until_not(method,message='')

until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值