Selenium-webdriver Chrome实战

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:// 要加上

image.png

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

  1. 节点不存在
try: 正常执行代码
    browser.find_element_by_id('hello')
except NoSuchElementException:没有节点是执行
    print('No Element')
finally:不管是否错误最后都会执行
    browser.close()
  1. 访问超时
try:
    browser.get('https://www.baidu.com')
except TimeoutException: 超时时执行
    print('Time Out')
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值