selenium API高级

1.多标签/多窗口之间的切换

场景:有的时候点击一个链接,新页面并非由当前页面跳转过去,而是新开一个页面打开,这种情况下,计算机需要识别多标签或窗口的情况。
在这里插入图片描述

2.多表单/多框架切换

在网页中,表单嵌套是很常见的情况,尤其是在登录的场景
(1)什么是多表单?
实际上就是使用iframe/frame,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单链接可以使页面中开一个窗口显示另一个页面的内容

<iframe id="itcast_frame1" src="inner.html" width="800",
height="600"></iframe>
  • 示例:
    在这里插入图片描述

driver.switch_to.default_content()
  跳回最外层的页面。

driver.switch_to.parent_frame()
  跳回上层的页面。

# 导入os库,用于获取文件路径
import os

#os.path.abspath(文件名)获取文件的绝对路径
file_path = 'file:///' + os.path.abspath('example_frame.html')



# 定位一个元素,验证已经到达深层表单
el_search = driver.find_element_by_id('sb_form')
print('依然在最深层表单中')
#跳回最外层的页面
driver.switch_to.default_content()
try:
    el_search = driver.find_element_by_id('sb_form')
except:
    print('已经从表单中退出')

3. 鼠标和键盘操作

关于鼠标的操作由ActionChains类来提供,关于键盘的操作由Keys类来提供

from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
  • 鼠标操作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
url = "http://cn.bing.com"
driver.get(url)

kw = driver.find_element_by_id("sb_form_q")
kw.send_keys("淘宝官网")
time.sleep(1)
#全选
kw.send_keys(Keys.CONTROL,'a')
time.sleep(1)
#剪切
kw.send_keys(Keys.CONTROL,'x')
time.sleep(1)
#复制
kw.send_keys(Keys.CONTROL,'v')
time.sleep(1)
driver.quit()
4. 弹出框操作
  1. 进入到弹出框中
    driver.switch_to.alert()

  2. 接收警告
    accept()

  3. 解散警告
    dismiss()

  4. 发送文本到警告框
    send_keys(data)

#进入弹出框,并点击确定
driver.switch_to.alert().accept()
5.下拉框操作

在这里插入图片描述

  1. 导入Select类
    from selenium.webdriver.support.select import Select

  2. 将定位到的下拉框元素传入Select类中
    selobj = Select(element) #下拉框元素已经定位到

  3. 调用响应方法选择下拉框中的选项

    select_by_index() 通过索引选择,index 索引从 0 开始

    select_by_value() 通过值选择(option标签的value属性的值)

    select_by_visible_text() 通过文本选择(下拉框的文本内容)

  4. 取消选择
    deselect_by_index()
    deselect_by_value()
    deselect_by_visible_text()

  5. 其他
    all_selected_options #查看所有已选
    first_selected_option #查看第一个已选
    is_multiple #查看是否是多选
    options #查看选项元素列表
    在这里插入图片描述

6.调用js代码

为什么要执行js代码?
因为selenium鞭长莫及,没有操作滚动条的方法,而一般操作滚动条都是使用js实现的。

#x为水平拖动距离,y为垂直拖动距离
js = 'window.scrollTo(x,y) '	
#执行js代码
driver.execute_script(js)	
	
n为从顶部往下移动滚动距离
js= 'var q=document.documentElement.scrollTop=n'
driver.execute_script(js)			

在这里插入图片描述

7.浏览器等待
  1. 为什么要进行等待?
    1.网速慢
    2.网站内容过多
    3.如果不进行等待而直接定位元素,可能会抛出异常

  2. selenium中等待的分类:

  • 显示等待:显示等待是根据条件进行等待,等待条件出现
    在这里插入图片描述在这里插入图片描述

  • 隐式等待: 隐式等待是根据时间进行等待,等待特定时间
    driver.implicitly_wait(n)
    n的单位为秒,n为最大值,在这个最大值内只要元素定位到就结束等待

    优先使用 隐式等待 --> 显式等待–> 固定等待(time.sleep())

8.操作cookie

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值