Python Selenium库的使用
链接: 参考
一、selenium基础
1、selenium简介
是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。
2、安装selenium
在Windows命令提示符(cmd)下输入
pip install selenium
3、安装浏览器驱动
如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。
我用的是Firefox浏览器驱动: geckodriver
4、配置浏览器驱动
(1)选择合适的驱动程序,下载完成后将其解压,打开解压之后的文件
(2)查找Python的安装目录,将准备好的geckodriver.exe文件放到这个目录下
二、selenium元素定位
1、8种定位方式
项目 | Value |
---|---|
find_element_by_id() | 通过元素id定位 |
find_element_by_name() | 通过元素name定位 |
find_element_by_xpath | 通过xpath表达式定位 |
find_element_by_class_name() | 通过类名定位 |
find_element_by_link_text() | 通过完整超链接定位 |
find_element_by_partial_link_text() | 通过部分链接定位 |
find_element_by_tag_name | 通过标签定位 |
find_element_by_css_selector() | 通过css选择器定位 |
2、定位的用法
假如我们有一个Web页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的。
<html>
<head>
<body link="#0000cc">
<a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
<form id="form" class="fm" name="f" action="/s">
<span class="soutu-btn"></span>
<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
我们的目的是要定位input标签的输入框。
通过id定位:
dr.find_element_by_id("kw")
通过name定位:
dr.find_element_by_name("wd")
通过class name定位:
dr.find_element_by_class_name("s_ipt")
通过tag name定位:
dr.find_element_by_tag_name("input")
通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
三、WebDriver常用方法
1、点击和输入
方法
- clear():清除文本
- send_keys():模拟按键输入
- click():单击元素
示例
from selenium import webdriver #导入Selenium WebDriver模块
driver = webdriver.Firefox() #新建对象并启动浏览器
driver.get("https://www.baidu.com") #调用get方法打开一个网页
driver.find_element_by_id("kw").clear() #通过clear方法来清理文本
driver.find_element_by_id("kw").send_keys("selenium") #输入文本内容
driver.find_element_by_id("su").click() #进行单击操作
2、其他常用方法
- size:返回元素的尺寸
- text:获取元素的文本
- get_attribute(name):获取属性值
- is_displayed():设置该元素是否为用户可见
示例
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
size = driver.find_element_by_id('kw').size
print(size) #获取百度输入框的宽、高
text = driver.find_element_by_id("bottom_layer").text
print(text) #获取百度底部的备案信息
attribute = driver.find_element_by_id("kw").get_attribute('type')
print(attribute) #获取百度输入的type属性的值
result = driver.find_element_by_id("kw").is_displayed()
print(result) #返回元素是否可见
driver.quit()