Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器。
安装Seleniumpip install Selenium
使用firefox浏览器驱动加载网页
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(r"http://www.baidu.com/")
driver.set_window_size(800,800)
input_first = driver.find_element(By.CLASS_NAME, 'content')
html = input_first.get_attribute('innerHTML')
driver.quit() # don't forget to quit the driver!
无界面模式加载网页
options = webdriver.FirefoxOptions()
options.add_argument("--headless") #设置火狐为headless无界面模式
options.add_argument("--disable-gpu")
driver = webdriver.Firefox(options=options)
常用方法
Selenium提供了8种定位方式:
定位一个元素定位多个元素含义find_element_by_idfind_elements_by_id通过元素id定位find_element_by_namefind_elements_by_name通过元素name定位find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位find_element_by_link_textfind_elements_by_link_text通过完整超链接定位find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位find_element_by_tag_namefind_elements_by_tag_name通过标签定位find_element_by_class_namefind_elements_by_class_name通过类名进行定位find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位
通过id定位:
driver.find_element_by_id("kw")
通过name定位:
driver.find_element_by_name("wd")
通过class name定位:
driver.find_element_by_class_name("s_ipt")
通过tag name定位:
driver.find_element_by_tag_name("input")
通过xpath定位,几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
通过css定位,几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
通过link text定位:
dr.find_element_by_link_text("新闻")
通过partial link text定位:
dr.find_element_by_partial_link_text("新")
控制浏览器操作的一些方法:
- set_window_size() 设置浏览器的大小
- back() 控制浏览器后退
- forward() 控制浏览器前进
- refresh() 刷新当前页面
- clear() 清除文本
- send_keys (value) 模拟按键输入
- click() 单击元素
- submit() 用于提交表单
- get_attribute(name) 获取元素属性值
- is_displayed() 设置该元素是否用户可见
- size 返回元素的尺寸
- text 获取元素的文本
size属性返回元素尺寸
size = driver.find_element_by_name("wd").size
print(size) #size属性,返回元素的尺寸,表单输入框之类的width、height等
text属性返回元素文本
text = driver.find_element_by_id("demo").text
print(text) #text属性,获取元素的文本,可以用力判断打开的页面是否是预期的。
get_attribute()方法获取属性值
attribute = driver.find_element_by_xpath(".//input[@id='kw']").get_attribute('maxlength')
print(attribute) #get_attribute()方法可以获取属性值
is_displayed()方法返回该元素是否设置可见
result = driver.find_element_by_partial_link_text("新闻").is_displayed()
print(result) #is_displayed() 元素是否设置可见,可见返回true则false
刷新浏览器
driver.refresh()
设置浏览器的大小
driver.set_window_size(1400,800)
单击元素
element = driver.find_element_by_link_text("新闻")
element.click()
鼠标事件
在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
- ActionChains(driver) 构造ActionChains对象
- context_click() 执行鼠标悬停操作
- move_to_element(above) 右击
- double_click() 双击
- drag_and_drop() 拖动
- move_to_element(above) 执行鼠标悬停操作
- context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位
- perform() 执行所有 ActionChains 中存储的行为,可以理解成是对整个操作的提交动作
鼠标左键单击
#定位到需要左键单击的元素
left_click = driver.find_element(By.ID,'ID')
#使用perform()执行action
ActionChains(driver).click(left_click).perform()
鼠标右键操作
#定位到需要右击的元素
right_click = driver.find_element_by_link_text("jemeter")
#使用perform()执行action
ActionChains(driver).context_click(right_click).perform()
鼠标悬停
attrible = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(attrible).perform()
鼠标拖放操作
drag_and_drop(source,target) 在源元素上按住鼠标左键,然后移动到目标元素上释放。
- source 鼠标拖动的源元素
- target鼠标释放的目标元素
#定位元素的初始位置
source = driver.find_element_by_css_selector("")
#定位元素的要移动到的位置
target = driver.find_element_by_name("")
#执行元素的拖放操作
ActionChains(driver).drag_and_drop(source,target).perform()