1-5节来自哔哩哔哩:selenium框架
1. 什么是selenium
Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。
2. PhantomJS的介绍
PhantomJS 是一个基于Webkit的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上的 JavaScript
3 . Chromedriver的介绍
Chromedriver 也是一个能够被selenium驱动的浏览器,但是和PhantomJS的区别在于它是有界面的
4. selenium的基本使用
- selenium的导包:
from selenium import webdriver
- selenium创建driver对象:
webdriver.PhantomJS()
- selenium请求数据:
driver.get("http://www.baidu.com/")
- selenium查看数据:
driver.page_source
- 关闭无界面浏览器:
driver.quit()
- 根据id定位元素:
driver.find_element_by_id(“kw”)
- 操作点击事件:
click()
- 给输入框赋值:
send_keys()
- 根据xpath定位元素:
driver.find_elements_by_xpath("//*[@id='s']/h1/a")
- 根据class定位元素:
driver.find_elements_by_class_name("box")
- 根据link_text定位元素:
driver.find_elements_by_link_text("下载豆瓣 App")
- 根据tag_name定位元素:
driver.find_elements_by_tag_name("h1")
- 获取文本内容:
element.text
- 获取标签属性:
element.get_attribute("href")
- 切换窗口:
switch_to.window()
- 切换iframe:
switch_to.frame()
- 进入嵌套网页:
driver.switch_to.frame()
- 页面前进:
driver.forward()
- 页面后退:
driver.back()
- 关掉页面(1)和关掉窗口(2)不同
from selenium import webdriver
if __name__ == '__main__':
# 1.创建浏览器 --> 对象
# PhantomJS 无头浏览器 --selenium版本更新之后,对PhantomJS不再更新,使用报警告
# driver = webdriver.PhantomJS(executable_path='C:\\python3.6\\phantomjs-2.1.1-windows\\bin\phantomjs.exe')
driver = webdriver.Chrome()
# 2.发送请求
driver.get('https://www.baidu.com/')
# 截取页面屏幕
driver.save_screenshot('baidu.png')
# 3.查看请求的数据
print(driver.page_source) # 查看渲染后的数据
print(driver.get_cookies()) # 查看请求页面后的cookies值
print(driver.current_url) # 查看请求的url
# 4.关闭浏览器(页面)
# driver.close()
# driver.quit()
4.1 selenium元素定位的方法
通过selenium的基本使用可以简单定位元素和获取对应的数据,接下来我们再来学习下 定位元素的其他方法
find_elements_by_id #(根据id属性值获取元素列表)
find_elements_by_class_name #(根据类名获取元素列表)
find_elements_by_xpath #(返回一个包含元素的列表)
find_elements_by_link_text #(根据标签的文本获取元素列表,精确定位)
find_elements_by_partial_link_text #(根据标签包含的文本获取元素列表,模糊定位)
find_elements_by_tag_name #(根据标签名获取元素列表)
4.2 selenium的其他方法
-
switch方法切换浏览器窗口的操作
一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:
# 1. 获取当前所有的窗口
current_windows = driver.window_handles
# 2. 根据窗口索引进行切换
driver.switch_to.window(current_windows[1])
- switch方法实现页面的前进后退
driver.forward() # 前进
driver.back() # 后退
- switch_to进入嵌套网页
iframe是html中常用的一种技术,即一个页面中嵌套了另一个网页,selenium默认是访问不了frame中的内容的,对应的解决思路是driver.switch_to.frame()
5. 自动播放音乐
# -*- coding:utf-8 -*-
from selenium import webdriver
import time
url = "https://music.163.com/"
# 1. 创建浏览器对象
chrome_opt = webdriver.ChromeOptions() # 创建参数设置对象.
chrome_opt.add_argument('--window-size=1366,768') # 设置窗口大小, 窗口大小会有影响.
driver = webdriver.Chrome(chrome_options=chrome_opt)
# 2. 发送请求
driver.get(url)
# 3. 登录过程
driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/a').click()#点击登陆
time.sleep(2)
driver.find_element_by_xpath('//*[@id="otherbtn"]/a').click()
time.sleep(2)
driver.find_element_by_xpath('//*[@id="j-official-terms"]').click()#点击同意条款
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[1]/div[1]/div[1]/div[2]/a').click()#手机号登陆
time.sleep(2)
driver.find_element_by_xpath('//*[@id="p"]').send_keys('1510*66*73')#手机号
time.sleep(2)
driver.find_element_by_xpath('//*[@id="pw"]').send_keys('fe**14')#密码
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[1]/div[5]/a').click()#点击登陆
time.sleep(2)
driver.find_element_by_xpath('//*[@id="g-topbar"]/div[1]/div/ul/li[2]/span/a/em').click()#我的音乐
#通过switch_to_frame()将当前定位切换到frame/iframe表单的内嵌页面中
driver.switch_to_frame(driver.find_element_by_class_name('g-iframe'))
time.sleep(2)
driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div/div[2]/div/div[3]/a[1]').click()#播放音乐
time.sleep(10)
driver.close() #关闭当前标识的窗口
#driver.quit()#关掉页面