selenium是一个web的自动化测试工具,可以直接调用浏览器,支持所有的主流浏览器。可以接收指令,理论上可以完成所有人为可以完成的操作。能够大幅降低爬虫编写难度,但会降低爬虫爬取速度。
使用方法:
chrome使用方法(在百度中搜索python):
# 导入selenium中webdrivermokuai
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Chrome(executable_path='/D:/driver/chromedriver')
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com/')
# 截图
driver.save_screenshot('picture.png')
# 搜索框元素find_element_by_id('kw')中使用send_keys赋予python值
driver.find_element_by_id('kw').send_keys('python')
# 点击搜索
driver.find_element_by_id('su').click()
# 退出浏览器
driver.quit()
phantomjs使用方法:
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com/')
# 截图
driver.save_screenshot('picture.png')
# 退出浏览器
driver.quit()
工作原理:
利用浏览器原生API,封装成面向对象的Selenium WebDriver API ,直接操作浏览器(元素以及浏览器自身)
selenium提取数据:
driver对象的常用属性和方法
- driver.page_source 当前标签页浏览器渲染之后的网页源代码
- driver.current_url 当前标签页url
- driver.close() 关闭当前标签页,若标签页为一,则关闭浏览器
- driver.quit() 关闭浏览器
- driver.back() 网页后退
- driver.save_screenshot(img_name) 页面截图
driver对象定位标签
- find_element_by_id() 返回一个元素
- find_element(s)_by_class_name 根据class名返回元素列表
- find_element(s)_by_name 根据标签name值返回元素列表
- find_element(s)_by_xpath 根据xpath返回元素列表
- find_element(s)_by_css 根据css选择返回元素列表
- find_element(s)_by_tag_name 根据标签名返回元素列表
- find_element(s)_by_link_text 根据文本返回元素列表
- find_element(s)_by_partial_link_text 根据链接所包含的文本返回元素列表‘’
标签对象提取文本内容和属性值
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com/')
# 定位h2标签
ret = driver.find_elements_by_tag_name('h2')
# 输出neirong
ret_t = ret[0].text
# 定位标签
ret = driver.find_elements_by_link_text('文本')
# 输出属性href
ret_t = ret[0].get_attribute('href')
# 退出浏览器
driver.quit()
selenium其他使用方法
selenium标签页切换
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com/')
# 获取当前所有标签页列表
currrnt_windows = driver.window_handles
# 根据索引,切换
driver.switch_to.windows(currrnt_windows[0])
# 关闭浏览器
driver.quit()
switch_to切换frame标签
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get('https://www.baidu.com/')
# 根据ID,切换
driver.switch_to.frame('id')
# 关闭浏览器
driver.quit()
selenium处理cookie
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get(url)
# 获取cookies
driver.get_cookies()
# cookies转字典
cookies = {}
for data in driver.get_cookies():
cookies[data['name']] = data['value']
# 删除某一条cookies
driver.delete_cookie("Cookiename")
# 删除所有cookies
driver.delete_all_cookies()
# 关闭浏览器
driver.quit()
selenium执行js代码
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 实例化
driver = webdriver.Chrome()
# 发送请求
driver.get(url)
# 设置js
js = '' #js语句
#执行js
driver.exectue_script(js)
# 关闭浏览器
driver.quit()
selenium页面等待
页面加载中,需要等待服务器响应,需要通过页面等待进行加载
等待分类:
强制等待:
time.sleep()
缺点:智能化低
隐式等待:
针对元素进行等待,根据设置时间进行等待
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 实例化
driver = webdriver.Chrome()
# 设置等待,最长等待时间20秒
driver.implicitly_wait(5)
# 发送请求
driver.get(url)
# 定位元素
driver.find_element_by_xpath()
# 关闭浏览器
driver.quit()
显式等待(常用于软件测试):
每经过多少秒就查看一次条件是否达成
selenium开启无界面模式
无头浏览器(部署)
driver = webdriver.PantomJS()
有头浏览器(开发)
driver = webdriver.Chrome()
开启无界面模式
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 创建配置对象
opt = webdriver.ChromeOptions()
# 添加配置参数
opt.add_argument('--headless')
opt.add_argument('--disable-gpu')
# 实例化
driver = webdriver.Chrome(chrome_options = opt)
# 发送请求
driver.get(url)
# 关闭浏览器
driver.quit()
selenium使用IP代理
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 创建配置对象
opt = webdriver.ChromeOptions()
# 添加配置IP参数
opt.add_argument('--proxy-server=http://ip')
# 实例化
driver = webdriver.Chrome(chrome_options = opt)
# 发送请求
driver.get(url)
# 关闭浏览器
driver.quit()
selenium更换用户代理
# 导入selenium中webdriver模块
from selenium import webdriver
# 未配置环境变量,设置driver环境变量,将driver绝对路径赋值
driver = webdriver.Phantomjs(executable_path='/D:/driver/phantomjs')
# 设置URL
url = 'https://www.baidu.com/'
# 创建配置对象
opt = webdriver.ChromeOptions()
# 更换user-agent
opt.add_argument('--user-agent=')
# 实例化
driver = webdriver.Chrome(chrome_options = opt)
# 发送请求
driver.get(url)
# 关闭浏览器
driver.quit()