Firefox浏览器作为selenium的默认浏览器不是没有道理的,其强大的元素定位能力,能快速有助于开发人员对于关键字的获取。而自动化需要掌握的关键步骤有:获取元素,操作元素,获取返回结果,断言(判断返回结果是否与期望结果一致),生成测试报告。
一、准备环境
- 安装Firebug和FirePath,在浏览器设置/添加组件/搜索插件名称
- 安装完成浏览器右上角有个爬虫的图标
二、查看页面元素
- 点击浏览器右上角爬虫图标
- 点击左下角箭头标识
- 将箭头标识移动到百度搜索框,输入框高亮
- 下方红色区域就是单位到输入框的属性
三、元素定位
从上图中可以得到相应搜索单元的属性,利用单元中元素的属性进行定位
- find_element_by_id()
可以看到属性 id ,id ="search-key",通过id属性定位到这个元素,定位到搜索框后,使用send_keys()
#coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
#通过id定位搜索框,并输出selenium
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").submit()
driver.implicitly_wait(10)
driver.quit()
2. find_element_by_name()
可以看到属性name,name="q",通过name属性定位到这个元素
driver.find_element_by_name("q").send_keys("selenium")
但是发现运行结果存在问题,因为name属性不是唯一的,因此无法通过name属性定位到搜索框
3. find_element_by_class_name()
可以看到属性class="engine-key",通过class属性定位到这个元素
driver.find_element_by_class_name("engine-key").send_keys("selenium")
出现的问题同2中一样,以为class_name属性不具有唯一性,不能直接定位
4. find_element_by_tag_name()
每个元素都有一个tag标签,如搜索框的tag标签是最前面的input属性,从上图也不难发现,一个页面中有很多tag标签,因此一般不用tag标签进行定位
driver.find_element_by_tag_name("input").send_keys("selenium")
5. find_element_by_link_text()
定位百度首页上的hao123
有一个href="http://www.hao123.com"的元素,这是一种超链接的表示方法,对于这种元素
#coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com/")
#通过超链接定位搜索框,并输出selenium
driver.find_element_by_link_text("hao123").click()
有时间,超链接可能很长,此时可以是用模糊定位,只需要输出部分字符串就可以了,可以使用
find_element_by_partial_link_text() 进行定位,如果要定位hao123,可以使用o123,但要确保字符在界面中的唯一性
driver.find_element_by_partial_link_text("o123").click()
6. find_element_by_xpath()
从上面可以看到,在元素定位的时候,难免有重复的,不能保证唯一性,因此除了id,name,tag,class,超链接等属性定位方法,作为最重要的元素定位方法之一的xpath方法进行定位,xpath是一种路径语言
这样就得到了搜索框的xpath路径,复制XPath中的路径进行搜索。
#coding:utf-8
from selenium import webdriver
import time
#打开火狐浏览器
driver = webdriver.Firefox()
driver.maximize_window()
#打开百度
driver.get("https://www.baidu.com/")
#页面加载需要几秒钟的时间
time.sleep(2)
driver.find_element_by_xpath(".//*[@id='kw']").send_keys("python")
driver.find_element_by_xpath(".//*[@id='su']").click()
time.sleep(3)
driver.quit()
7. find_element_by_css_selector()
css是另一种语法,比xpath更简洁,那如何进行查看呢
#coding:utf-8
from selenium import webdriver
import time
#打开火狐浏览器
driver = webdriver.Firefox()
driver.maximize_window()
#打开百度
driver.get("https://www.baidu.com/")
#页面加载需要几秒钟的时间
time.sleep(2)
driver.find_element_by_css_selector("#kw").send_keys("python")
driver.find_element_by_css_selector("#su").click()
time.sleep(3)
driver.quit()