阅读selenium文档
This commit is contained in:
575
python/selenium.md
Normal file
575
python/selenium.md
Normal file
@@ -0,0 +1,575 @@
|
|||||||
|
- [selenium](#selenium)
|
||||||
|
- [Components](#components)
|
||||||
|
- [Driver](#driver)
|
||||||
|
- [WebDriver](#webdriver)
|
||||||
|
- [Getting Started](#getting-started)
|
||||||
|
- [安装](#安装)
|
||||||
|
- [常用操作](#常用操作)
|
||||||
|
- [开启浏览器会话](#开启浏览器会话)
|
||||||
|
- [通过webdriver执行操作](#通过webdriver执行操作)
|
||||||
|
- [请求浏览器信息](#请求浏览器信息)
|
||||||
|
- [指定等待策略](#指定等待策略)
|
||||||
|
- [获取页面上的元素](#获取页面上的元素)
|
||||||
|
- [针对页面上的元素执行操作](#针对页面上的元素执行操作)
|
||||||
|
- [访问元素上的信息](#访问元素上的信息)
|
||||||
|
- [关闭会话](#关闭会话)
|
||||||
|
- [提交表单样例](#提交表单样例)
|
||||||
|
- [Driver](#driver-1)
|
||||||
|
- [Browser Options](#browser-options)
|
||||||
|
- [browserName](#browsername)
|
||||||
|
- [Driver Service](#driver-service)
|
||||||
|
- [使用默认service实例](#使用默认service实例)
|
||||||
|
- [指定driver port](#指定driver-port)
|
||||||
|
- [Remote Web Driver](#remote-web-driver)
|
||||||
|
- [元素交互](#元素交互)
|
||||||
|
- [文件上传](#文件上传)
|
||||||
|
- [文件定位](#文件定位)
|
||||||
|
- [在整个dom中进行查找](#在整个dom中进行查找)
|
||||||
|
- [基于已定位的元素进行查找](#基于已定位的元素进行查找)
|
||||||
|
- [css选择器](#css选择器)
|
||||||
|
- [查找所有匹配的元素](#查找所有匹配的元素)
|
||||||
|
- [同web元素进行交互](#同web元素进行交互)
|
||||||
|
- [click](#click)
|
||||||
|
- [send\_keys](#send_keys)
|
||||||
|
- [clear](#clear)
|
||||||
|
- [获取元素信息](#获取元素信息)
|
||||||
|
- [is\_displayed](#is_displayed)
|
||||||
|
- [is\_enabled](#is_enabled)
|
||||||
|
- [is\_selected](#is_selected)
|
||||||
|
- [tag\_name](#tag_name)
|
||||||
|
- [元素位置和大小](#元素位置和大小)
|
||||||
|
- [获取css的值](#获取css的值)
|
||||||
|
- [获取文本内容](#获取文本内容)
|
||||||
|
- [获取元素属性](#获取元素属性)
|
||||||
|
- [浏览器交互](#浏览器交互)
|
||||||
|
- [获取当前页签的title](#获取当前页签的title)
|
||||||
|
- [获取当前url](#获取当前url)
|
||||||
|
- [浏览器导航](#浏览器导航)
|
||||||
|
- [跳转到页面](#跳转到页面)
|
||||||
|
- [返回到上一个页签](#返回到上一个页签)
|
||||||
|
- [forward](#forward)
|
||||||
|
- [刷新当前页签](#刷新当前页签)
|
||||||
|
- [alert](#alert)
|
||||||
|
- [confirm](#confirm)
|
||||||
|
- [prompt](#prompt)
|
||||||
|
- [新增cookie](#新增cookie)
|
||||||
|
- [iframe](#iframe)
|
||||||
|
- [winodws/tab 交互](#winodwstab-交互)
|
||||||
|
- [获取当前窗口句柄](#获取当前窗口句柄)
|
||||||
|
- [切换窗口句柄](#切换窗口句柄)
|
||||||
|
- [创建新窗口/tab](#创建新窗口tab)
|
||||||
|
- [关闭tab](#关闭tab)
|
||||||
|
- [关闭会话](#关闭会话-1)
|
||||||
|
- [获取窗口大小](#获取窗口大小)
|
||||||
|
- [设置窗口大小](#设置窗口大小)
|
||||||
|
- [获取窗口位置](#获取窗口位置)
|
||||||
|
- [设置窗口位置](#设置窗口位置)
|
||||||
|
- [最大化窗口](#最大化窗口)
|
||||||
|
- [最小化窗口](#最小化窗口)
|
||||||
|
- [全屏窗口](#全屏窗口)
|
||||||
|
- [截屏](#截屏)
|
||||||
|
- [为元素截屏](#为元素截屏)
|
||||||
|
- [执行js脚本](#执行js脚本)
|
||||||
|
- [打印页面](#打印页面)
|
||||||
|
|
||||||
|
|
||||||
|
# selenium
|
||||||
|
## Components
|
||||||
|
### Driver
|
||||||
|
Driver负责控制实际的浏览器,大多数driver是由浏览器供应商提供的。
|
||||||
|
|
||||||
|
### WebDriver
|
||||||
|
WebDriver通过Driver和浏览器通信,通过driver, webDriver将命令发送给浏览器,并且通过driver收到浏览器的返回信息。
|
||||||
|
|
||||||
|
> Drvier和浏览器运行在同一个操作系统上,WebDriver和`drvier&浏览器`可能并不运行在同一系统上。WebDriver会远程调用driver,driver再调用处于同一系统的浏览器。
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
### 安装
|
||||||
|
```bash
|
||||||
|
pip install selenium
|
||||||
|
```
|
||||||
|
### 常用操作
|
||||||
|
#### 开启浏览器会话
|
||||||
|
```py
|
||||||
|
driver = webdriver.Chrome()
|
||||||
|
```
|
||||||
|
#### 通过webdriver执行操作
|
||||||
|
```py
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 请求浏览器信息
|
||||||
|
```py
|
||||||
|
# driver.title代表浏览器当前页签的标题
|
||||||
|
title = driver.title
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 指定等待策略
|
||||||
|
再获取元素之前,需要确保元素存在于当前页面上,并且与元素进行交互时,必须确保当前元素是可交互的(页签加载需要时间)。
|
||||||
|
|
||||||
|
此时,可以通过自定义等待时间来解决。
|
||||||
|
```py
|
||||||
|
driver.implicitly_wait(0.5)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 获取页面上的元素
|
||||||
|
```py
|
||||||
|
text_box = driver.find_element(by=By.NAME, value="my-text")
|
||||||
|
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 针对页面上的元素执行操作
|
||||||
|
```py
|
||||||
|
text_box.send_keys("Selenium")
|
||||||
|
submit_button.click()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 访问元素上的信息
|
||||||
|
```py
|
||||||
|
text = message.text
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 关闭会话
|
||||||
|
```py
|
||||||
|
driver.quit()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 提交表单样例
|
||||||
|
```py
|
||||||
|
from selenium import webdriver
|
||||||
|
from selenium.webdriver.common.by import By
|
||||||
|
|
||||||
|
|
||||||
|
def test_eight_components():
|
||||||
|
driver = webdriver.Chrome()
|
||||||
|
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
|
||||||
|
|
||||||
|
title = driver.title
|
||||||
|
assert title == "Web form"
|
||||||
|
|
||||||
|
driver.implicitly_wait(0.5)
|
||||||
|
|
||||||
|
text_box = driver.find_element(by=By.NAME, value="my-text")
|
||||||
|
submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
|
||||||
|
|
||||||
|
text_box.send_keys("Selenium")
|
||||||
|
submit_button.click()
|
||||||
|
|
||||||
|
message = driver.find_element(by=By.ID, value="message")
|
||||||
|
value = message.text
|
||||||
|
assert value == "Received!"
|
||||||
|
|
||||||
|
driver.quit()
|
||||||
|
```
|
||||||
|
## Driver
|
||||||
|
开启和关闭session代表着开启和关闭浏览器。
|
||||||
|
|
||||||
|
### Browser Options
|
||||||
|
对于remote driver sessions,需要为其指定options对象,指定的options对象将会决定使用远程的哪个浏览器。
|
||||||
|
|
||||||
|
每个浏览器都会有其独属的额外选项,可以为每个浏览器额外指定。
|
||||||
|
|
||||||
|
#### browserName
|
||||||
|
当使用options对象时,browserName选项会被默认指定:
|
||||||
|
|
||||||
|
### Driver Service
|
||||||
|
Service用于管理local driver的启动和停止,service无法被用于remote webdriver session。
|
||||||
|
|
||||||
|
service允许指定driver的信息,例如driver位置和使用的端口号,也可以通过service指定日志信息。
|
||||||
|
|
||||||
|
#### 使用默认service实例
|
||||||
|
```py
|
||||||
|
service = webdriver.ChromeService()
|
||||||
|
driver = webdriver.Chrome(service=service)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 指定driver port
|
||||||
|
如果想要driver运行在指定的端口,可以通过service进行指定。
|
||||||
|
```py
|
||||||
|
service = webdriver.ChromeService(port=1234)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Remote Web Driver
|
||||||
|
Selenium允许调用位于远程机器上的浏览器,需要远程机器上安装Selenium Grid。
|
||||||
|
```py
|
||||||
|
options = webdriver.ChromeOptions()
|
||||||
|
driver = webdriver.Remote(command_executor=server, options=options)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 元素交互
|
||||||
|
### 文件上传
|
||||||
|
通过元素的`send_keys`方法,支持支持文件上传。
|
||||||
|
```py
|
||||||
|
file_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']")
|
||||||
|
file_input.send_keys(upload_file)
|
||||||
|
driver.find_element(By.ID, "file-submit").click()
|
||||||
|
```
|
||||||
|
|
||||||
|
### 文件定位
|
||||||
|
#### 在整个dom中进行查找
|
||||||
|
可以通过调用`driver.find_element`来在整个dom中对元素进行查找,其会返回匹配的第一个元素
|
||||||
|
```py
|
||||||
|
vegetable = driver.find_element(By.CLASS_NAME, "tomatoes")
|
||||||
|
```
|
||||||
|
#### 基于已定位的元素进行查找
|
||||||
|
如果想要在已经定位元素的子节点中进行查找,可以调用如下方法:
|
||||||
|
```py
|
||||||
|
fruits = driver.find_element(By.ID, "fruits")
|
||||||
|
fruit = fruits.find_element(By.CLASS_NAME,"tomatoes")
|
||||||
|
```
|
||||||
|
#### css选择器
|
||||||
|
selenium支持通过css选择器的语法来进行查找:
|
||||||
|
```py
|
||||||
|
fruit = driver.find_element(By.CSS_SELECTOR,"#fruits .tomatoes")
|
||||||
|
```
|
||||||
|
#### 查找所有匹配的元素
|
||||||
|
可以通过`find_elements`方法来获取所有匹配的元素,而不是第一个匹配的元素
|
||||||
|
```py
|
||||||
|
plants = driver.find_elements(By.TAG_NAME, "li")
|
||||||
|
```
|
||||||
|
|
||||||
|
### 同web元素进行交互
|
||||||
|
可以针对元素指定如下类型的交互
|
||||||
|
- click(可使用任何元素)
|
||||||
|
- send_keys(只针对文本输入框或内容可编辑的元素)
|
||||||
|
- clear(只针对文本输入框或内容可编辑的元素)
|
||||||
|
- submit(只针对表单元素)
|
||||||
|
- select(只针对下拉框类型元素)
|
||||||
|
|
||||||
|
#### click
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Click on the element
|
||||||
|
driver.find_element(By.NAME, "color_input").click()
|
||||||
|
```
|
||||||
|
#### send_keys
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Clear field to empty it from any previous data
|
||||||
|
driver.find_element(By.NAME, "email_input").clear()
|
||||||
|
|
||||||
|
# Enter Text
|
||||||
|
driver.find_element(By.NAME, "email_input").send_keys("admin@localhost.dev" )
|
||||||
|
```
|
||||||
|
#### clear
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Clear field to empty it from any previous data
|
||||||
|
driver.find_element(By.NAME, "email_input").clear()
|
||||||
|
```
|
||||||
|
### 获取元素信息
|
||||||
|
#### is_displayed
|
||||||
|
```py
|
||||||
|
# Navigate to the url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Get boolean value for is element display
|
||||||
|
is_email_visible = driver.find_element(By.NAME, "email_input").is_displayed()
|
||||||
|
```
|
||||||
|
#### is_enabled
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Returns true if element is enabled else returns false
|
||||||
|
value = driver.find_element(By.NAME, 'button_input').is_enabled()
|
||||||
|
```
|
||||||
|
#### is_selected
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Returns true if element is checked else returns false
|
||||||
|
value = driver.find_element(By.NAME, "checkbox_input").is_selected()
|
||||||
|
```
|
||||||
|
#### tag_name
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Returns TagName of the element
|
||||||
|
attr = driver.find_element(By.NAME, "email_input").tag_name
|
||||||
|
```
|
||||||
|
#### 元素位置和大小
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Returns height, width, x and y coordinates referenced element
|
||||||
|
res = driver.find_element(By.NAME, "range_input").rect
|
||||||
|
```
|
||||||
|
#### 获取css的值
|
||||||
|
```py
|
||||||
|
# Navigate to Url
|
||||||
|
driver.get('https://www.selenium.dev/selenium/web/colorPage.html')
|
||||||
|
|
||||||
|
# Retrieves the computed style property 'color' of linktext
|
||||||
|
cssValue = driver.find_element(By.ID, "namedColor").value_of_css_property('background-color')
|
||||||
|
```
|
||||||
|
#### 获取文本内容
|
||||||
|
```py
|
||||||
|
# Navigate to url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/linked_image.html")
|
||||||
|
|
||||||
|
# Retrieves the text of the element
|
||||||
|
text = driver.find_element(By.ID, "justanotherlink").text
|
||||||
|
```
|
||||||
|
#### 获取元素属性
|
||||||
|
```py
|
||||||
|
# Navigate to the url
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/inputs.html")
|
||||||
|
|
||||||
|
# Identify the email text box
|
||||||
|
email_txt = driver.find_element(By.NAME, "email_input")
|
||||||
|
|
||||||
|
# Fetch the value property associated with the textbox
|
||||||
|
value_info = email_txt.get_attribute("value")
|
||||||
|
```
|
||||||
|
## 浏览器交互
|
||||||
|
### 获取当前页签的title
|
||||||
|
```py
|
||||||
|
String title = driver.getTitle();
|
||||||
|
```
|
||||||
|
### 获取当前url
|
||||||
|
```py
|
||||||
|
String url = driver.getCurrentUrl();
|
||||||
|
```
|
||||||
|
### 浏览器导航
|
||||||
|
#### 跳转到页面
|
||||||
|
```py
|
||||||
|
driver.get("https://www.selenium.dev/selenium/web/index.html")
|
||||||
|
```
|
||||||
|
#### 返回到上一个页签
|
||||||
|
```py
|
||||||
|
driver.back()
|
||||||
|
```
|
||||||
|
#### forward
|
||||||
|
```py
|
||||||
|
driver.forward()
|
||||||
|
```
|
||||||
|
#### 刷新当前页签
|
||||||
|
```py
|
||||||
|
driver.refresh()
|
||||||
|
```
|
||||||
|
#### alert
|
||||||
|
```py
|
||||||
|
element = driver.find_element(By.LINK_TEXT, "See an example alert")
|
||||||
|
element.click()
|
||||||
|
|
||||||
|
wait = WebDriverWait(driver, timeout=2)
|
||||||
|
alert = wait.until(lambda d : d.switch_to.alert)
|
||||||
|
text = alert.text
|
||||||
|
# 接受alert
|
||||||
|
alert.accept()
|
||||||
|
```
|
||||||
|
#### confirm
|
||||||
|
```py
|
||||||
|
element = driver.find_element(By.LINK_TEXT, "See a sample confirm")
|
||||||
|
driver.execute_script("arguments[0].click();", element)
|
||||||
|
|
||||||
|
wait = WebDriverWait(driver, timeout=2)
|
||||||
|
alert = wait.until(lambda d : d.switch_to.alert)
|
||||||
|
text = alert.text
|
||||||
|
alert.dismiss()
|
||||||
|
```
|
||||||
|
#### prompt
|
||||||
|
```py
|
||||||
|
element = driver.find_element(By.LINK_TEXT, "See a sample prompt")
|
||||||
|
driver.execute_script("arguments[0].click();", element)
|
||||||
|
|
||||||
|
wait = WebDriverWait(driver, timeout=2)
|
||||||
|
alert = wait.until(lambda d : d.switch_to.alert)
|
||||||
|
alert.send_keys("Selenium")
|
||||||
|
text = alert.text
|
||||||
|
alert.accept()
|
||||||
|
```
|
||||||
|
### 新增cookie
|
||||||
|
```py
|
||||||
|
from selenium import webdriver
|
||||||
|
|
||||||
|
driver = webdriver.Chrome()
|
||||||
|
|
||||||
|
driver.get("http://www.example.com")
|
||||||
|
|
||||||
|
# Adds the cookie into current browser context
|
||||||
|
driver.add_cookie({"name": "key", "value": "value"})
|
||||||
|
```
|
||||||
|
### iframe
|
||||||
|
想要与iframe中的内容进行交互,需要先移动到iframe区域
|
||||||
|
```py
|
||||||
|
# Store iframe web element
|
||||||
|
iframe = driver.find_element(By.CSS_SELECTOR, "#modal > iframe")
|
||||||
|
|
||||||
|
# switch to selected iframe
|
||||||
|
driver.switch_to.frame(iframe)
|
||||||
|
|
||||||
|
# Now click on button
|
||||||
|
driver.find_element(By.TAG_NAME, 'button').click()
|
||||||
|
```
|
||||||
|
### winodws/tab 交互
|
||||||
|
#### 获取当前窗口句柄
|
||||||
|
```py
|
||||||
|
driver.current_window_handle
|
||||||
|
```
|
||||||
|
#### 切换窗口句柄
|
||||||
|
可以通过`driver.switch_to.window(windows_handle)`来进行切换页签
|
||||||
|
```py
|
||||||
|
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:
|
||||||
|
# Open URL
|
||||||
|
driver.get("https://seleniumhq.github.io")
|
||||||
|
|
||||||
|
# Setup wait for later
|
||||||
|
wait = WebDriverWait(driver, 10)
|
||||||
|
|
||||||
|
# Store the ID of the original window
|
||||||
|
original_window = driver.current_window_handle
|
||||||
|
|
||||||
|
# Check we don't have other windows open already
|
||||||
|
assert len(driver.window_handles) == 1
|
||||||
|
|
||||||
|
# Click the link which opens in a new window
|
||||||
|
driver.find_element(By.LINK_TEXT, "new window").click()
|
||||||
|
|
||||||
|
# Wait for the new window or tab
|
||||||
|
wait.until(EC.number_of_windows_to_be(2))
|
||||||
|
|
||||||
|
# Loop through until we find a new window handle
|
||||||
|
for window_handle in driver.window_handles:
|
||||||
|
if window_handle != original_window:
|
||||||
|
driver.switch_to.window(window_handle)
|
||||||
|
break
|
||||||
|
|
||||||
|
# Wait for the new tab to finish loading content
|
||||||
|
wait.until(EC.title_is("SeleniumHQ Browser Automation"))
|
||||||
|
```
|
||||||
|
#### 创建新窗口/tab
|
||||||
|
```py
|
||||||
|
# Opens a new tab and switches to new tab
|
||||||
|
driver.switch_to.new_window('tab')
|
||||||
|
|
||||||
|
# Opens a new window and switches to new window
|
||||||
|
driver.switch_to.new_window('window')
|
||||||
|
```
|
||||||
|
#### 关闭tab
|
||||||
|
调用`driver.close`会关闭当前的页签
|
||||||
|
```py
|
||||||
|
#Close the tab or window
|
||||||
|
driver.close()
|
||||||
|
|
||||||
|
#Switch back to the old tab or window
|
||||||
|
driver.switch_to.window(original_window)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 关闭会话
|
||||||
|
当不再使用浏览器会话后,应该调用`driver.quit()`方法。
|
||||||
|
|
||||||
|
如果未调用该方法或是调用该方法失败,将会导致driver进程和端口号一直不被释放。
|
||||||
|
|
||||||
|
|
||||||
|
#### 获取窗口大小
|
||||||
|
```py
|
||||||
|
# Access each dimension individually
|
||||||
|
width = driver.get_window_size().get("width")
|
||||||
|
height = driver.get_window_size().get("height")
|
||||||
|
|
||||||
|
# Or store the dimensions and query them later
|
||||||
|
size = driver.get_window_size()
|
||||||
|
width1 = size.get("width")
|
||||||
|
height1 = size.get("height")
|
||||||
|
```
|
||||||
|
#### 设置窗口大小
|
||||||
|
```py
|
||||||
|
driver.set_window_size(1024, 768)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 获取窗口位置
|
||||||
|
```py
|
||||||
|
# Access each dimension individually
|
||||||
|
x = driver.get_window_position().get('x')
|
||||||
|
y = driver.get_window_position().get('y')
|
||||||
|
|
||||||
|
# Or store the dimensions and query them later
|
||||||
|
position = driver.get_window_position()
|
||||||
|
x1 = position.get('x')
|
||||||
|
y1 = position.get('y')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 设置窗口位置
|
||||||
|
```py
|
||||||
|
# Move the window to the top left of the primary monitor
|
||||||
|
driver.set_window_position(0, 0)
|
||||||
|
```
|
||||||
|
#### 最大化窗口
|
||||||
|
```py
|
||||||
|
driver.maximize_window()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 最小化窗口
|
||||||
|
```py
|
||||||
|
driver.minimize_window()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 全屏窗口
|
||||||
|
```py
|
||||||
|
driver.fullscreen_window()
|
||||||
|
```
|
||||||
|
#### 截屏
|
||||||
|
```py
|
||||||
|
from selenium import webdriver
|
||||||
|
|
||||||
|
driver = webdriver.Chrome()
|
||||||
|
|
||||||
|
driver.get("http://www.example.com")
|
||||||
|
|
||||||
|
# Returns and base64 encoded string into image
|
||||||
|
driver.save_screenshot('./image.png')
|
||||||
|
|
||||||
|
driver.quit()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 为元素截屏
|
||||||
|
```py
|
||||||
|
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')
|
||||||
|
|
||||||
|
# Returns and base64 encoded string into image
|
||||||
|
ele.screenshot('./image.png')
|
||||||
|
|
||||||
|
driver.quit()
|
||||||
|
```
|
||||||
|
#### 执行js脚本
|
||||||
|
```py
|
||||||
|
# Stores the header element
|
||||||
|
header = driver.find_element(By.CSS_SELECTOR, "h1")
|
||||||
|
|
||||||
|
# Executing JavaScript to capture innerText of header element
|
||||||
|
driver.execute_script('return arguments[0].innerText', header)
|
||||||
|
```
|
||||||
|
#### 打印页面
|
||||||
|
```py
|
||||||
|
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)
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user