0


【学习笔记】Selenium 与浏览器交互

学习目的

了解浏览器交互的作用和用法。

第一部分:获取浏览器信息

获取标题

从浏览器中读取当前页面的标题:

title = driver.title
获取当前URL

从浏览器的地址栏读取当前的 URL:

url = driver.current_url

第二部分:浏览器导航

打开网站

启动浏览器后你要做的第一件事就是打开你的网站:

driver.get(url)
后退

按下浏览器的后退按钮:

driver.back()
前进

按下浏览器的前进按钮:

driver.forward()
刷新

刷新当前页面:

driver.refresh()

第三部分:弹窗处理

  1. WebDriver提供了一个API, 用于处理JavaScript提供的警告框,提示框和确认框这三种类型的原生弹窗。
  2. 警告框显示一条自定义消息和一个用于关闭该警告的按钮,WebDriver可以从弹窗获取文本并接受或关闭这些警告。
  3. 确认框类似于警告框, 不同之处在于用户还可以选择取消。
  4. 提示框还包括文本输入,与处理表单元素类似, 可以使用WebDriver的sendKeys来输入。
# 等待警告框出现
alert = wait.until(expected_conditions.alert_is_present())# 将警告信息存在变量中
text = alert.text

# 向弹窗内输入信息
alert.send_keys("")# 点击按钮确认
alert.accept()# 点击按钮拒绝
alert.dismiss()

**说明:

wait.until(expected_conditions.alert_is_present())

中:
wait.until: 创建一个WebDriverWait对象wait,它将等待页面加载。
expected_conditions.alert_is_present():等待条件,检查当前页面上是否有一个JavaScript警告框(alert)存在。**

第四部分:Cookies

Cookie是从网站发送并存储在您的计算机中的一小段数据,主要用于识别用户并加载存储的信息,WebDriver API提供了一种内置的方法来控制Cookie:

# 引入webdriverfrom selenium import webdriver
#初始化浏览器
driver = webdriver.Edge()#初始化页面
driver.get("http://www.example.com")# 为页面添加cookie
driver.add_cookie({"name":"key","value":"value",'sameSite':'Strict'or'Lax'})# 获取指定name的cookieprint(driver.get_cookie("name"))# 获取全部cookieprint(driver.get_cookies())# 删除指定name的cookie
driver.delete_cookie("name")# 删除全部cookie
driver.delete_all_cookies()

cookie语句参数说明:

driver.add_cookie({})

参数描述name必需。规定 cookie 的名称。value必需。规定 cookie 的值。expire可选。规定 cookie 的有效期。domain可选。规定 cookie 的域名,path可选。规定 cookie的有效范围,这个参数domain参数基础上的有效范围,如果path设置为”/”,那就是在整个domain都有效。secure可选。规定cookie是否仅通过安全的https,值为0或1。如果值为1,则cookie只能在https连接上有效,默认值为0,表示cookei在http和https连接上都有效。(0或1,也可表示Flase或True)httpOnly可选。通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击(跨站脚本攻击),这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。

第五部分:frames框架处理

在WebDriver中,frames和iframe处理方式相同。如果我们定位的元素在iframe里,那么可能会得到一个

no such element 无此元素

的错误,要想与iframe内的元素交互,我们首先需要切换到iframe里。WebDriver 提供了三种切换到iframe的方法。

# 使用页面元素进行切换是最灵活的选择,可以使用元素选择器找到框架并切入。# 存储网页元素
iframe = driver.find_element(By.CSS_SELECTOR,"#modal > iframe")# 切换到选择的 iframe
driver.switch_to.frame(iframe)# 如果您的frame或iframe具有id或name属性,则可以使用该属性进行切入。# 如果name或id 在页面上不是唯一的,那么将切入到第一个匹配的框架里。
driver.switch_to.frame('ID')# 还可以使用frame的索引进行切换。# 基于索引切换到第 2 个 iframe
iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]# 切换到选择的 iframe
driver.switch_to.frame(iframe)# 离开iframe或frameset,切出。
driver.switch_to.default_content()

第六部分:窗口事件

焦点窗口
# WebDriver 没有区分窗口和标签页。# 如果你的程序打开了一个新标签页或窗口,Selenium会赋予他一个唯一的标识符—句柄# 句柄在窗口未关闭时不会丢失。# 获取当前窗口的句柄:
driver.current_window_handle

# 获取浏览器所有窗口的句柄,返回一个列表,里面记录了当前浏览器所有的窗口句柄
handles=driver.window_handles

# 按照句柄切换窗口
driver.switch_to.window(handles[number])# 打开新标签页并切换焦点到新标签页
driver.switch_to.new_window('tab')# 打开一个新窗口并切换焦点到新窗口
driver.switch_to.new_window('window')# 切回到上一个标签页或窗口
driver.switch_to.window(original_window)#关闭当前标签页或窗口
driver.close()# 退出浏览器
driver.quit()

注意:退出将会:
关闭所有与 WebDriver 会话相关的窗口和标签页。
结束浏览器进程。
结束后台驱动进程。

窗口管理
窗口尺寸管理

获取浏览器窗口的大小(以像素为单位)。

# 分别获取每个尺寸
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")

# 或者存储尺寸并可以随时查询
size = driver.get_window_size()
width = size.get("width")
height = size.get("height")

# 设置窗口大小
driver.set_window_size(width, height)
# 最大化窗口
driver.maximize_window()
# 最小化窗口
driver.minimize_window()
# 全屏窗口,类似于在大多数浏览器中按下 F11
driver.fullscreen_window()
窗口位置管理
# 获取浏览器窗口的坐标,基于窗口和屏幕左上角
# 分别获取每个坐标
x = driver.get_window_position().get('x')
y = driver.get_window_position().get('y')

# 或者存储坐标并可以随时查询
position = driver.get_window_position()
x1 = position.get('x')
y1 = position.get('y')

# 将窗口移动到指定的位置
driver.set_window_position(x, y)
其他窗口操作

屏幕截图:用于捕获当前浏览窗口位置的上下文的屏幕截图。

driver.save_screenshot('./image.png')

元素屏幕截图:用于捕获当前浏览窗口指定元素位置的上下文的屏幕截图。

# 元素选择器
ele = driver.find_element(By.CSS_SELECTOR,'h1')# 截图
ele.screenshot('./image.png')

执行脚本:在当前frame或者窗口的上下文中,执行JavaScript代码片段。

# 元素选择器
header = driver.find_element(By.CSS_SELECTOR, "h1")

# 在指定元素中执行JS代码片段
driver.execute_script('return arguments[0].innerText', header)
标签: 学习 笔记 selenium

本文转载自: https://blog.csdn.net/weixin_45993836/article/details/138278414
版权归原作者 李破山 所有, 如有侵权,请联系我们删除。

“【学习笔记】Selenium 与浏览器交互”的评论:

还没有评论