Selenium 常用API 之操作浏览器
上文我们讲解了如何打开浏览器,本文讲讲解关于操作浏览器的更多API
后退
driver.back()
前进
driver.forward()
刷新
driver.refresh()
Alerts 警告框
driver.find_element(By.LINK_TEXT, "See an example alert").click()
alert = wait.until(expected_conditions.alert_is_present())
text = alert.text
alert.accept()
Confirm 确认框
driver.find_element(By.LINK_TEXT, "See a sample confirm").click()
wait.until(expected_conditions.alert_is_present())
alert = driver.switch_to.alert
text = alert.text
alert.dismiss()
添加 Cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.example.com")
driver.add_cookie({"name": "key", "value": "value"})
获取命名的 Cookie
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.example.com")
driver.add_cookie({"name": "foo", "value": "bar"})
print(driver.get_cookie("foo"))
iFrames和frames
使用 WebElement
iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
driver.switch_to.frame(iframe)
driver.find_element(By.TAG_NAME, 'button').click()
使用 name 或 id
driver.switch_to.frame('buttonframe')
driver.find_element(By.TAG_NAME, 'button').click()
使用索引
iframe = driver.find_elements(By.TAG_NAME,'iframe')[1]
driver.switch_to.frame(iframe)
离开框架
driver.switch_to.default_content()
窗口和标签页
WebDriver 没有区分窗口和标签页。如果你的站点打开了一个新标签页或窗口,Selenium 将允许您使用窗口句柄来处理它。 每个窗口都有一个唯一的标识符,该标识符在单个会话中保持持久性。你可以使用以下方法获得当前窗口的窗口句柄:
driver.current_window_handle
切换窗口或标签页
单击在 <a href=“https://seleniumhq.github.io"target="_blank”>新窗口 中打开链接, 则屏幕会聚焦在新窗口或新标签页上,但 WebDriver 不知道操作系统认为哪个窗口是活动的。 要使用新窗口,您需要切换到它。 如果只有两个选项卡或窗口被打开,并且你知道从哪个窗口开始, 则你可以遍历 WebDriver, 通过排除法可以看到两个窗口或选项卡,然后切换到你需要的窗口或选项卡。
不过,Selenium 4 提供了一个新的 api NewWindow 它创建一个新选项卡 (或) 新窗口并自动切换到它。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Firefox() as driver:
driver.get("https://seleniumhq.github.io")
wait = WebDriverWait(driver, 10)
original_window = driver.current_window_handle
assert len(driver.window_handles) == 1
driver.find_element(By.LINK_TEXT, "new window").click()
wait.until(EC.number_of_windows_to_be(2))
for window_handle in driver.window_handles:
if window_handle != original_window:
driver.switch_to.window(window_handle)
break
wait.until(EC.title_is("SeleniumHQ Browser Automation"))
创建新窗口(或)新标签页并且切换
创建一个新窗口 (或) 标签页,屏幕焦点将聚焦在新窗口或标签在上。您不需要切换到新窗口 (或) 标签页。如果除了新窗口之外, 您打开了两个以上的窗口 (或) 标签页,您可以通过遍历 WebDriver 看到两个窗口或选项卡,并切换到非原始窗口。
driver.switch_to.new_window('tab')
driver.switch_to.new_window('window')
关闭窗口或标签页
当你完成了一个窗口或标签页的工作时,_并且_它不是浏览器中最后一个打开的窗口或标签页时,你应该关闭它并切换回你之前使用的窗口。 假设您遵循了前一节中的代码示例,您将把前一个窗口句柄存储在一个变量中。把这些放在一起,你会得到:
driver.close()
driver.switch_to.window(original_window)
如果在关闭一个窗口后忘记切换回另一个窗口句柄,WebDriver 将在当前关闭的页面上执行,并触发一个 No Such Window Exception 无此窗口异常。必须切换回有效的窗口句柄才能继续执行
在会话结束时退出浏览器
driver.quit()
- 退出将会
- 关闭所有与 WebDriver 会话相关的窗口和选项卡
- 结束浏览器进程
- 结束后台驱动进程
- 通知 Selenium Grid 浏览器不再使用,以便可以由另一个会话使用它(如果您正在使用 Selenium Grid)
调用 quit() 失败将留下额外的后台进程和端口运行在机器上,这可能在以后导致一些问题。
有的测试框架提供了一些方法和注释,您可以在测试结束时放入 teardown() 方法中。
获取窗口大小
获取浏览器窗口的大小(以像素为单位)。
width = driver.get_window_size().get("width")
height = driver.get_window_size().get("height")
size = driver.get_window_size()
width1 = size.get("width")
height1 = size.get("height")
设置窗口大小
driver.set_window_size(1024, 768)
得到窗口的位置
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(0, 0)
最大化窗口
扩大窗口。对于大多数操作系统,窗口将填满屏幕,而不会阻挡操作系统自己的菜单和工具栏。
driver.maximize_window()
最小化窗口
最小化当前浏览上下文的窗口. 这种命令的精准行为将作用于各个特定的窗口管理器.
最小化窗口通常将窗口隐藏在系统托盘中.
注意: 此功能适用于Selenium 4以及更高版本.
driver.minimize_window()
全屏窗口
填充整个屏幕,类似于在大多数浏览器中按下 F11。
driver.fullscreen_window()
屏幕截图
用于捕获当前浏览上下文的屏幕截图. WebDriver端点 屏幕截图 返回以Base64格式编码的屏幕截图.
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.example.com")
driver.save_screenshot('./image.png')
driver.quit()
元素屏幕截图
用于捕获当前浏览上下文的元素的屏幕截图. WebDriver端点 屏幕截图 返回以Base64格式编码的屏幕截图.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.example.com")
ele = driver.find_element(By.CSS_SELECTOR, 'h1')
ele.screenshot('./image.png')
driver.quit()
执行脚本
在当前frame或者窗口的上下文中,执行JavaScript代码片段.
header = driver.find_element(By.CSS_SELECTOR, "h1")
driver.execute_script('return arguments[0].innerText', header)
打印页面
打印当前浏览器内的页面
注意: 此功能需要无头模式下的Chromium浏览器
from selenium.webdriver.common.print_page_options import PrintOptions
print_options = PrintOptions()
print_options.page_ranges = ['1-2']
driver.get("printPage.html")
base64code = driver.print_page(print_options)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)