Python Web 自动化测试工具 — Selenium
Selenium 是一个 Web 自动化测试工具,Selenium 通过非常简洁方便的 API,使用 Selenium WebDrivers(Selenium web 驱动器)像使用 Firefox, IE, Chrome, Remote 等一样方便。
Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。
1、安装 selenium
$ pip install selenium
2、下载浏览器驱动
Firefox 浏览器驱动:WebDriver for Firefox
Chrome 浏览器驱动:ChromeDriver
IE 浏览器驱动:IEDriver
Edge 浏览器驱动:Microsoft Edge WebDriver
语法:
from selenium import webdriver # Edge浏览器 driver = webdriver.Edge("executable_path") # Firefox浏览器 driver = webdriver.Firefox() # Chrome浏览器 driver = webdriver.Chrome() # Internet Explorer浏览器 driver = webdriver.Ie() # Opera浏览器 driver = webdriver.Opera() # PhantomJS driver = webdriver.PhantomJS() # 打开网页 driver.get(url)
注意:executable_path 需要指定浏览器驱动的可执行文件路径,如果使用默认值,则假定浏览器驱动可执行文件在 $PATH 中。
3、使用 selenium
使用流程:
导包
创建浏览器对象
发送请求、获取数据
处理数据、保存数据
关闭页面/退出浏览器
3.1 有界面模式
# 导包 from selenium import webdriver # 创建浏览器对象 driver = webdriver.Edge() # 发送请求 driver.get("https://www.baidu.com/") # 获取数据 data = driver.page_source print(type(data), data) # str <html>...</html>
3.2 无界面模式
# 导包 from selenium import webdriver from selenium.webdriver.edge.options import Options # 实例化options对象 options = Options() options.add_argument("--headless") # 创建浏览器对象 driver = webdriver.Edge(options=options) # 发送请求 driver.get("https://www.baidu.com/") # 获取数据 data = driver.page_source print(type(data), data) # str <html>...</html>
3.3 元素操作
定位元素语法:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Edge() text_box = driver.find_element(by=By.NAME, value="my-text") submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")
# By策略 By.ID By.NAME By.XPATH By.CSS_SELECTOR By.CLASS_NAME By.LINK_TEXT By.PARTIAL_LINK_TEXT By.TAG_NAME
操作元素语法:
点击 (适用于任何元素)
发送键位 (仅适用于文本字段和内容可编辑元素)
清除 (仅适用于文本字段和内容可编辑元素)
提交 (仅适用于表单元素)
选择 (参见 选择列表元素)
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Edge() text_box = driver.find_element(by=By.NAME, value="my-text") submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button") # 点击 submit_button.click()
实例: 实现谷歌搜索
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys # 创建浏览器对象 driver = webdriver.Edge() # 发送请求 driver.get("http://www.google.com") # 定位搜索框、输入文本并回车 driver.find_element(By.NAME, "q").send_keys("python" + Keys.ENTER)
3.4 浏览器操作
# 前进 driver.forward() # 后退 driver.back() # 刷新 driver.refresh() # 关闭 driver.close() # 退出 driver.quit() # 控制浏览器窗口大小 driver.set_window_size(480, 800)