selenium2.0新增了webdrive,它是利用浏览器原生的API封装了一些底层操作的功能,支持python、java、php
selenium原理:三步走
代码的请求发送给浏览器驱动,
驱动像出租车司机解析了我们的需求
开着浏览器把我们送到了目的地
webdriver扮演了什么角色:
是selenium三个核心之一,封装了对浏览器操作的函数,方便我们直接调用,实现对浏览器的操控。
1、python基础知识,不说,请买一本“python编程从入门到实践”自行掌握。
涉及内容:搭建环境、变量、数据类型、列表、操作列表、if语句、字典、用户输入和while循环、函数、类、文件和异常处理、测试代码
2、元素定位
selenium中根据HTML页面元素的属性来定位,在web中操作步骤如下:
(1)定位页面元素,获取元素
(2)对元素实施操:单击、双击、拖拽、输入值等
selenium提供了8中定位方法,是id、name、xpath、class name 、tag name、link_text、partial link text 及css selector
id定位
HTML tag的id值是唯一,故不存在id定位多个元素情况,能用id就不用其他,增加维护成本,例:
百度首页输入python,执行后:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("python")
css定位
css主要是用id、class定位的,它定位选择器有十几种,优点:速度快、语法简洁,是真的简洁
css用id定位:
driver.find_element_by_css_selector("#kw").send_keys("python")
css用class定位:
driver.find_element_by_css_selector(".s_ipt").send_keys("python")
其他属性定位:
driver.find_element_by_css_selector('[name="wd"]')
复合定位:
driver.find_element_by_css_selector('[angwox="wd"][autocomplete="off"]')
模糊定位:
# 定位style值以tfjiao开头的元素
driver.find_element_by_css_selector('[style^="tfjiao"]').click()
# 定位style值以tengfei.gif结尾的元素
driver.find_element_by_css_selector('div[style$="tengfei.gif"]').click()
# 定位style值包含tengfei的元素
driver.find_element_by_css_selector('div[style*="tengfei"]').click()
右键复制:
选中元素,右键复制绝对路径,好像没啥说的
复制后粘贴:#form > input[type=hidden]:nth-child(3)
link_text
值是:超链接的全部名字
新闻
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("新闻").click()
xpth定位
xpth是xml path语言的缩写,是一种用来确定xml文档中某部分位置的语言。xpath比css灵活,比css速度慢
(1)定位界面文本,这个用的挺多
driver.find_element_by_xpath('//*[text()="kw"]').click()
(2)属性值定位
driver.find_element_by_xpath('//*[@xygsng="kw"]').send_keys("python")
(3)了解下复合定位就行:取用css的组合吧
driver.find_element_by_xpath('//*[@xygsng="kw" and @xydafn="mg"]').send_keys("python")
(4)右键copy full xpth【绝对路径】,实在没办法了再用这个,反正右键复制有时候不靠谱,坑啊坑
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input').send_keys("python")
partial_link_text
类似于模糊查询,这个没啥说的,就是有的超链接文字太长了,用这个比较舒服
新闻
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_link_text("新").click()
name定位
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element_by_name("wd").send_keys("python")
class定位
百度首页搜索框为例:
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
**driver.find_element_by_class_name("s_ipt").send_keys("python")**
tag_name定位:
基本用不到,看下就行了,通过标签的名称定位,
#coding=utf-8
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
print(driver.find_element_by_tag_name('form').get_attribute('name'))
关于八大定位个人理解:
1、css定位id、name
2、xpath定位文本值
3、css组合定位
4、xpath绝对路径【不利用维护,容易出问题,烦人】