一、原理
在客户端完成selenium脚本的编写,将脚本传送给selenium服务器,selenium服务器使用浏览器驱动(driver)与浏览器(browser)进行交互。
二、核心组件
WebDriver:使用浏览器提供的API控制浏览器,模拟用户操作浏览器;
IDE:录制
Grid:分布式
三、安装
pip3 install selenium
各浏览器驱动下载地址:http://www.seleniumhq.org/download/
四、demo1
1 # 百度一下 2 3 from selenium import webdriver 4 5 def test_search(): 6 driver = webdriver.Chrome() 7 driver.get('https://www.baidu.com') 8 search = driver.find_element_by_id('su').get_attribute('value') 9 assert search == '百度一下'
五、等待方式
1)显式等待
from selenium.webdriver.support import expected_conditions from selenium.webdriver.support.wait import WebDriverWait # 显示等待 WebDriverWait(self.driver,10).until( expected_conditions.element_to_be_clickable(By.ID,'su') )
2)隐式等待
# 隐式等待 self.driver.implicitly_wait(5)
3)强制等待
import time time.sleep(3)
4) demo
1 # 访问爱测 https://home.testing-studio.com,点击所有分类,点击答疑区 2 # 三种等待方式:强制等待、显示等待、隐式等待 3 4 5 import time 6 from selenium import webdriver 7 from selenium.webdriver.common.by import By 8 from selenium.webdriver.support import expected_conditions 9 from selenium.webdriver.support.wait import WebDriverWait 10 11 12 class TestHogwarts(): 13 def setup(self): 14 self.driver = webdriver.Chrome() 15 self.driver.get('https://home.testing-studio.com') 16 # 隐式等待 17 self.driver.implicitly_wait(5) 18 19 def teardown(self): 20 time.sleep(3) 21 self.driver.quit() 22 23 24 def test_hogwarts(self): 25 # 点击所有分类 26 category_name = (By.XPATH,'//*[@id="ember139"]/div/span/span[2]/span') 27 print(category_name) 28 time.sleep(3) 29 print('test') 30 self.driver.find_element_by_xpath('//*[@id="ember21"]').click() 31 time.sleep(3) 32 # 显示等待 33 WebDriverWait(self.driver,10).until( 34 expected_conditions.element_to_be_clickable(category_name) 35 ) 36 self.driver.find_element(*category_name).click() 37 # self.driver.find_element_by_xpath('//*[@id="ember139"]/div/span/span[2]/span').click()
六、常见定位方式
1)根据id定位
driver.find_element_by_id('su')
2)根据name定位
driver.find_element_by_name('wd')
3)根据XPATH定位 (xml path language)
driver.find_element_by_xpath('//*[@id="su"]')
验证XPATH定位是否正确,可以使用console输入$x('//*[@id="su"]')
4)根据CSS定位 (css_selector)
driver.find_element_by_css_selector('#su')
定位class=one .one
定位id=one #one
5) 根据link定位
# 全部匹配 driver.find_element_by_link_text('欢迎光临') # 部分匹配 driver.find_element_by_partial_link_text('欢迎')
6) 根据tag定位
driver.find_element_by_tag_name('input')
7) 根据class_name定位
driver.find_element_by_class_name('active')
六、selenium常见操作
1)输入、点击、清除
对应selenium中的send_keys、click、clear
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_name('wd').send_keys('码学课堂') driver.find_element_by_id('su').click() driver.find_element_by_name('wd').clear()
2)关闭窗口、浏览器
关闭当前句柄close(),关闭整个进程quite()
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') # 关闭当前窗口 driver.close() # 关闭浏览器 driver.quit()
3)获取元素属性
获取元素标签上的属性get_attribute(''value)
元素的坐标location
元素的大小size
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') search = driver.find_element_by_id('su') print(search.get_attribute('value')) print(search.location) print(search.size) 输出: 百度一下 {'x': 844, 'y': 188} {'height': 44, 'width': 108}
4)获取网页源代码、刷新页面
网页源代码page_source
刷新页面refresh()
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') # 刷新页面 driver.refresh() # 打印当前页面的源码 print(driver.page_source)
5)设置窗口大小
最小化窗口minimize_window()
最大化窗口maximize_window()
设置窗口的具体大小set_window_size(width,height)
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') # 最小化窗口 driver.minimize_window() # 最大化窗口 driver.maximize_window() # 将浏览器设置为1000*1000的大小 driver.set_window_size(1000,1000)