Selenium是一个浏览器自动化操作框架。Selenium主要由三种工具组成。第一个工具SeleniumIDE,是Firefox的扩展插件,支持用户录制和回访测试。录制/回访模式存在局限性,对许多用户来说并不适合,因此第二个工具——Selenium WebDriver提供了各种语言环境的API来支持更多控制权和编写符合标准软件开发实践的应用程序。最后一个工具——SeleniumGrid帮助工程师使用Selenium API控制分布在一系列机器上的浏览器实例,支持并发运行更多测试。在项目内部,它们分别被称为“IDE”、“WebDriver”和“Grid”。
WebDriver针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还利用操作系统级的调用模拟用户输入。WebDriver支持Firefox(FirefoxDriver)、IE (InternetExplorerDriver)、Opera (OperaDriver)和Chrome (ChromeDriver)。 它还支持Android (AndroidDriver)和iPhone (IPhoneDriver)的移动应用测试。它还包括一个基于HtmlUnit的无界面实现,称为HtmlUnitDriver。WebDriver API可以通过Python、Ruby、Java和C#访问,支持开发人员使用他们偏爱的编程语言来创建测试。
1、引入Webdriver
from selenium import webdriver
2、声明chrome浏览器
driver = webdriver.Chrome()
3、用get方法打开百度首页
driver.get("http://www.baidu.com")
此时会模拟一个浏览器打开网址
注意 http:// 要加上
4、打印网站源代码
print(driver.page_source)
5、关闭浏览器
driver.close()
在打开浏览器与关闭浏览器之间我们就可以进行一系列操作
6、查找页面元素 的方法
查找页面上唯一的元素
find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector
查找页面上重复的元素
find_elements_by_name
find_elements_by_id
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
7、可以引入
from selenium.webdriver.common.by import By
#然后就可以
input_first = driver.find_element(By.ID,"q")
8、延时操作
引入 time
import time
time.sleep(秒)
9、执行JavaScript
driver.execute_script('alert("hellow word")')
10、获取元素属性
获取到页面节点后
节点.get_attribute('class')
11、等待时间
引入 WebDriverWait
from selenium.webdriver.support.ui import WebDriverWait
wait = WebDriverWait(driver, 10)
12、判断节点是否可以点击/是否出现该元素
引入 EC
from selenium.webdriver.support import expected_conditions as EC
EC.element_to_be_clickable() 是否能点击
EC.presence_of_element_located() 是否出现
13、常用判断条件
title_is 标题是某内容
title_contains 标题包含某内容
presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
visibility_of_element_located 元素可见,传入定位元组
visibility_of 可见,传入元素对象
presence_of_all_elements_located 所有元素加载出
text_to_be_present_in_element 某个元素文本包含某文字
text_to_be_present_in_element_value 某个元素值包含某文字
frame_to_be_available_and_switch_to_it frame加载并切换
invisibility_of_element_located 元素不可见
element_to_be_clickable 元素可点击
staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 元素可选择,传元素对象
element_located_to_be_selected 元素可选择,传入定位元组
element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert
14、浏览器前进后退
back()
forward()
15、cookie操作
get_cookies()
driver.add_cookie({'name': 'name', 'domain': 'www.zhihu.com', 'value': 'zhaofan'})
delete_all_cookes()
add_cookie()
16、选项卡操作
可以使用js开打开新的选项卡
driver.execute_script('window.open()')
不同的选项卡存放在:driver.window_handles 中
使用:driver.window_handles[0]就可以操作第一个选项卡
17、异常处理
比如 节点不存在等异常访问超时
官网:http://selenium-python.readthedocs.io/api.html#module-selenium.common.exceptions
- 节点不存在
try: 正常执行代码
browser.find_element_by_id('hello')
except NoSuchElementException:没有节点是执行
print('No Element')
finally:不管是否错误最后都会执行
browser.close()
- 访问超时
try:
browser.get('https://www.baidu.com')
except TimeoutException: 超时时执行
print('Time Out')