【Selenium(五)】

本文介绍了使用SeleniumWebDriver进行鼠标悬停、键盘输入、获取断言信息、元素等待、多窗口切换以及处理iframe表单的示例,涵盖了基础的浏览器操作技巧。
摘要由CSDN通过智能技术生成

一、鼠标事件

from selenium import webdriver
# 导入ActionChains类进行鼠标悬停操作
from selenium.webdriver.common.action_chains import  ActionChains
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

time.sleep(2)

# 定位到设置
st_button=driver.find_element_by_id("s-usersetting-top")

# 设置鼠标悬停
ActionChains(driver).move_to_element(st_button).perform()

二、键盘事件

# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

time.sleep(2)

# 定位到设置,输入内容
search_box=driver.find_element_by_id("kw")
search_box.send_keys("seleniumABC")

time.sleep(3)
# 删除多余的m,调用删除键
# Keys.BACK_SPACE只能删除一个字母,要删除多个字母,需要乘几
search_box.send_keys(3*Keys.BACK_SPACE)

time.sleep(3)
# 调用回车建
search_box.send_keys(Keys.ENTER)

三、获取断言信息

(1)通过文本信息判断

# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

# 搜索出来第一页的所有内容标题
# find_element_by_xpath定位元素的方法现实的是elements,多个元素在一个列表中
titles = driver.find_elements_by_xpath('//div[@id="content_left"]//h3')
print(titles)

# 由于获取结果是列表,要获取内容,必须遍历列表,一个一个获取
for t in titles:
    #获取文本信息
    print(t.text)

(2)通过title信息做断言

# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

time.sleep(3)
# 获取网页标题
print(driver.title)

(3)根据URL判断

# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

time.sleep(3)
# 获取当前网页URL
print(driver.current_url)

四、设置元素等待

# -*- coding: utf-8 -*-

from selenium import webdriver
# 显示等待时,元素定位方式需要使用By加载
from selenium.webdriver.common.by import By

# 设置显示等待
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')

# WebDriverWait(浏览器driver,最大超时时间,轮询时间)
# EC.presence_of_element_located()里面接受的是元素定位方式和具体的表达式,要使用元组的形式传入
# 定位搜索框
search_obj=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
# 输入内容
search_obj.send_keys("hello")
# 设置提交
# search_obj.submit()
search_obj.send_keys(Keys.ENTER)

五、多窗口切换

 浏览器打开的窗口有一个叫句柄的概念,句柄类似于每一个标签页的id一样,是唯一的。

# -*- coding: utf-8 -*-

from selenium import webdriver

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keys

driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("李克强")
search_box.send_keys(Keys.ENTER)

# 获取标签页句柄
windowhandle=driver.current_window_handle
# print(windowhandle)

# 点击 李克强百度百科
driver.find_element_by_xpath('//div[@id="1"]/div/h3/a').click()

# 获取当前浏览器的所有窗口的句柄,获取回来的拆改纽扣句柄放在一个列表里
headles=driver.window_handles
print(headles)

# 根据句柄进行切换
"""方法一
for head in headles:
    # 如果窗口句柄不等于打开的第一个窗口的句柄,则就是第二个
    if head!=windowhandle:
        driver.switch_to.window(head)
"""

"""方法二"""
# 根据下标进行句柄切换,获取回来的时候,窗口的句柄是一个列表,-1代表是最新打开的窗口句柄,0代表第一个
driver.switch_to.window(headles[-1])

# 点击 播报 按钮
driver.find_element_by_xpath('//div[@class="lemmaTitleBox_EbvJX"]/div/span/span/span').click()

六、表单切换

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

  • switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位
  • 除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。
# -*- coding: utf-8 -*-
import time

from selenium import webdriver

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keys

driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://mail.163.com/")

# iframe表单切换
"""
switch_to.frame()里面可以填写iframe表单的id和name,但是id和name要唯一
还可以通过其他的定位方式定位到该iframe标签,然后将定位到iframe标签对象传入到switch
"""
# 通过XPath的方式定位iframe标签
iframe_element=driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
driver.switch_to.frame(iframe_element)

# 定位邮箱输入框
driver.find_element_by_css_selector('input[name="email"]').send_keys("xiangzc")

# 定位密码框
driver.find_element_by_css_selector('input[name="password"]').send_keys("xiangzc")

# 点击 登录 按钮
driver.find_element_by_id('dologin').click()

time.sleep(2)
# 点击VIP,按照此方式进入失败,因为进行完上述操作后,是在子页面中,而VIP还在外层页面,所以需要切换出来
driver.switch_to.default_content()
driver.find_element_by_css_selector('a[href="https://vipmail.163.com/?from=fmail"]').click()

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值