selenium
- 定义
1、Web自动化测试工具,可运行在浏览器,根据指令操作浏览器
2、只是工具,必须与第三方浏览器结合使用
- 安装
Linux: sudo pip3 install selenium
Windows: python -m pip install selenium
phantomjs浏览器
- 定义
无界面浏览器(又称无头浏览器),在内存中进行页面加载,高效
- 安装(phantomjs、chromedriver(类似能驱动浏览器,启动谷歌的)、geckodriver(启动火狐的))
Windows
1、下载对应版本的phantomjs、chromedriver、geckodriver
2、把chromedriver.exe拷贝到python安装目录的Scripts目录下(添加到系统环境变量)
# 查看python安装路径: where python
3、验证
cmd命令行: chromedriver
# 下载地址
chromedriver : 下载对应版本(输入chrome://version/)查看自己的浏览器版本
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
geckodriver
https://github.com/mozilla/geckodriver/releases
Linux
1、下载后解压
tar -zxvf geckodriver.tar.gz
2、拷贝解压后文件到 /usr/bin/ (添加环境变量)
sudo cp geckodriver /usr/bin/
3、更改权限
sudo -i
cd /usr/bin/
chmod 777 geckodriver
安装方法都一样,就phantomjs有点区别,解压后,找到bin,将bin里面的内容添加到环境变量
- 使用
示例代码一:使用 selenium+浏览器 打开百度
from selenium import webdriver
import time
browser = webdriver.Chrome(excutable_path='/路径/geckodriver') # 如果没添加到环境变量需要指明路径
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')
browser.quit()
示例代码二:打开百度,搜索赵丽颖,查看
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')
# 向搜索框(id kw)输入 赵丽颖 查看代码,看输入框的name是什么,百度的name=kw
ele = browser.find_element_by_xpath('//*[@id="kw"]')
ele.send_keys('赵丽颖')
time.sleep(1)
# 点击 百度一下 按钮(id su)
su = browser.find_element_by_xpath('//*[@id="su"]')
su.click()
# 向搜索框输入美女
browser.find_element_by_id('kw').send_keys('美女')
# 点击百度一下按钮
browser.find_element_by_id('su').click()
# 给出时间加载页面
time.sleep(2)
# 点击下一页
browser.find_element_by_class_name('n').click()
# 截图
browser.save_screenshot('赵丽颖.png')
# 关闭浏览器
browser.quit()
- 浏览器对象(browser)方法
1、browser = webdriver.Chrome(executable_path='path')
2、browser.get(url)
3、browser.page_source # 查看响应内容
4、browser.page_source.find('字符串')
# 从html源码中搜索指定字符串,没有找到返回:-1
# 应用场景,主要使用判断是否是最后一页
5、browser.quit() # 关闭浏览器
代码:
from selenium import webdriver
# 创建浏览器对象
browser = webdriver.Chrome()
# 打开百度
browser.get('http://www.baidu.com')
# 打印响应内容
html = browser.page_source
result = browser.page_source.find('kw')
print(result)
- 定位节点
单元素查找(1个节点对象)
# 找到第一个节点就返回
1、browser.find_element_by_id('')
2、browser.find_element_by_name('')
3、browser.find_element_by_class_name('')
4、browser.find_element_by_xpath('')
... ...
多元素查找([节点对象列表])
1、browser.find_elements_by_id('')
2、browser.find_elements_by_name('')
3、browser.find_elements_by_class_name('')
4、browser.find_elements_by_xpath('')
... ...
- 节点对象操作
1、ele.send_keys('') # 搜索框发送内容
2、ele.click() # 点击事件
3、ele.text # 获取文本内容
4、ele.get_attribute('src') # 获取属性值
chromedriver设置无界面模式
from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')
切换页面
1、适用网站
页面中点开链接出现新的页面,但是浏览器对象browser还是之前页面的对象
2、应对方案
# 获取当前所有句柄(窗口)
all_handles = browser.window_handles
# 切换到新的窗口
browser.switch_to_window(all_handles[1])
Web客户端验证
弹窗中的用户名和密码如何输入?
不用输入,在URL地址中填入就可以
示例:
from selenium import webdriver
# 注意在协议中添加:用户名:密码@
url = 'http://username:password@www.***.com'
browser = webdriver.Chrome()
browser.get(url)