day03 - selenium高级API

这篇博客介绍了Selenium的高级功能,包括多窗口切换、多表单处理、鼠标键盘操作、弹出框交互、下拉框选择、执行JavaScript代码、浏览器等待策略以及Cookies操作。讲解了如何在不同场景下使用这些技巧,如通过窗口句柄切换、处理iframe表单、模拟鼠标键盘动作、处理弹出警告以及管理Cookies等。
摘要由CSDN通过智能技术生成

一、多窗口切换

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

  • 获取所有窗口的句柄(浏览器的身份证列表)

    handles_list = driver.window_handlers
    

说明:调用该方法会得到一个列表,在selenium运行过程中的每一个窗口都有一个对应的值存放在里面。

  • 通过窗口的句柄进入的窗口

     driver.switch_to_window(handles_list[n])(太老)
     driver.switch_to.window(handles_list[n])
    

说明:通过窗口句柄激活进入某一窗口

#使用链接切换窗口
from  selenium import  webdriver
import time
# 获取浏览器对象
driver = webdriver.Firefox()
# 访问北京58网页
url = 'https://bj.58.com/'
driver.get(url)
# 定位租房链接元素
el = driver.find_element_by_link_text('租房')
time.sleep(5)
print('点击前手柄:',driver.window_handles)      #列表
print('点击url:',driver.current_url)
# 点击定位到的租房链接
el.click()
print('点击后手柄:',driver.window_handles)    #列表
print('点击后url:',driver.current_url)
time.sleep(5)
driver.close()        # 关闭窗口

运行后

点击前手柄: ['{7ed66512-bd4c-46da-a491-e4d6462130c6}']
点击url: https://bj.58.com/
点击后手柄: ['{7ed66512-bd4c-46da-a491-e4d6462130c6}', '{6c61fb30-62e4-45e7-baac-cbdc8b477c8b}']
点击后url: https://bj.58.com/
#使用窗口句柄切换窗口
from  selenium import  webdriver
import time
# 获取浏览器对象
driver = webdriver.Firefox()
# 访问北京58网页
url = 'https://bj.58.com/'
driver.get(url)
# 定位租房链接元素
el = driver.find_element_by_link_text('苹果')
print('点击前手柄:',driver.window_handles)
print('点击url:',driver.current_url)
print('当前标题:',driver.title)
# 点击定位到的租房链接
el.click()
handles_list = driver.window_handles     # 列表
driver.switch_to.window(handles_list[1])
#注:自动提示的代码switch_to_window出现删除线(太老)
print('点击后手柄:',driver.window_handles)
print('点击后url:',driver.current_url)
print('转换后标题:',driver.title)
time.sleep(5)
driver.close()        # 关闭窗口

二、多表单切换

  • 多表单(一般链接页面上用户登录窗口)
    实际上就是使用iframe/frame标签,引用了其他页面的链接,真正的页面数据并没有出现在当前源码中,但是在浏览器中我们看到,简单理解可以使页面中开了一个窗口显示另一个页面
  • 处理方法
  1. 直接使用id值切换进表单

    driver.switch_to.frame(value)
    或driver.switch_to_frame(value)
    
  2. 定位到表单元素,再切换进入

     el = driver.find_element_by_xxx(value)  # 定位表单 
    
  3. 跳回最外层的页面

    driver.switch_to.default_content()	
    
  4. 跳回上层的页面

    driver.switch_to.parent_frame()
    
 #访问126并使用表单
from selenium import webdriver
import time
# 创建浏览器
driver = webdriver.Firefox()
url = 'http://126.com/'
driver.get(url)
# 防止加载太快
time.sleep(5)
# 定位到表单--第一种方式进入
# el_frame = driver.find_element_by_css_selector('#x-URS-iframe')
# 切换进入表单中
# driver.switch_to.frame(el_frame)
# 通过id进入---第二种方式进入
driver.switch_to.frame('x-URS-iframe')
# 在表单中定位账号输入框
el_user = driver.find_element_by_name('email')
# 输入账号
el_user.send_keys('python')
# 定位密码输入框标签
el_pwd = driver.find_element_by_name('password')
# 输入密码
el_pwd.send_keys('python')
# 定位登陆按钮
el_sub = driver.find_element_by_id('dologin')
# 点击登录
el_sub.click()
time.sleep(5)
driver.close()
# 多层表单切换并退出
from  selenium import  webdriver
import os
import  time
# 获取浏览器对象
driver = webdriver.Firefox()
# 获取文件路径
file_path = 'file:///' + os.path.abspath('example_frame.html')
# 打开本地文件
driver.get(file_path)
# 切换到第一层表单
frame_1 = driver.switch_to.frame('itcast_frame1')     
# 使用id属性值切换
# 切换到第二层表单
frame_2 = driver.switch_to.frame('itcast_frame2')
# 定位bing搜索框
el = driver.find_element_by_id('sb_form_q')
# 向输入框输入内容
el
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值