一、selenium概念
1、用来完成浏览器自动化的相关操作
2、使用程序编写一系列的键盘、鼠标的相关操作(让浏览器来完成), 当我们执行代码时,就会触发一系列的事件
二、selenium在爬虫中的作用
1、可以获取动态加载的数据
三、selenium安装
1、pip install selenium
2、下载浏览器驱动程序: http://chromedriver.storage.googleapis.com/index.html (找到最接近的版本)
四、selenium使用
1、导包: from selenium import webdriver
2、实例化某一款浏览器的驱动,获取一个对象
3、使用对象中的相关方法制定一系列的事件(键盘、鼠标的相关操作)
五、简单案例,打开百度
from selenium import webdriver
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘)
bro.get("https://www.baidu.com")
bro.close()
六、自动打开百度,搜素刘德华
# 百度搜索刘德华案例
import time
from selenium import webdriver
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘)
bro.get("https://www.baidu.com")
# 1. 定位到输入框
kw = bro.find_element_by_id("kw")
# 2. 键入刘德华关键字
kw.send_keys("刘德华")
time.sleep(5)
# 3. 定位到"百度一下"按钮
input_key = bro.find_element_by_id("su")
# 4. 触发点击事件
input_key.click()
time.sleep(5)
bro.close()
七、爬取雪球网
from selenium import webdriver
bro = webdriver.Chrome(‘./chromedriver.exe‘)
bro.get(‘https://xueqiu.com‘)
# 获取动态加载的数据
print(bro.page_source)
bro.quit()
八、爬取雪球网的更多数据
import time
from selenium import webdriver
bro = webdriver.Chrome(‘./chromedriver.exe‘)
bro.get(‘https://xueqiu.com‘)
js = "window.scrollTo(0, document.body.scrollHeight)" # 表示滚轮往下拖动一屏的高度
bro.execute_script(js)
time.sleep(2)
bro.execute_script(js)
time.sleep(2)
bro.execute_script(js)
time.sleep(2)
bro.execute_script(js)
time.sleep(2)
# 获取动态加载的数据
print(bro.page_source)
bro.quit()
九、谷歌无头浏览器
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_optiOns= Options()
chrome_options.add_argument(‘--headless‘)
chrome_options.add_argument(‘--disable-gpu‘)
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘, chrome_optiOns=chrome_options)
bro.get("https://www.baidu.com")
# 截图
bro.save_screenshot(‘3.jpg‘)
# 1. 定位到输入框
kw = bro.find_element_by_id("kw")
# 2. 键入刘德华关键字
kw.send_keys("刘德华")
time.sleep(2)
# 3. 定位到"百度一下"按钮
input_key = bro.find_element_by_id("su")
# 4. 触发点击事件
input_key.click()
# 截图
bro.save_screenshot(‘4.jpg‘)
time.sleep(2)
bro.close()
十、前进和后退
import time
from selenium import webdriver
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘)
# 注意: bro对象只有将页面完全加载完成之后,才会进行下一步的事件触发
bro.get("https://www.baidu.com")
bro.get("https://www.taobao.com")
bro.get("https://www.jd.com")
time.sleep(2)
# 后退
bro.back()
time.sleep(2)
# 前进
bro.forward()
time.sleep(2)
bro.close()
十一、动作链。拖动iframe标签
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘)
bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
# 定位到页面中的iframe标签内部,这样才可以定位到它内部的标签
bro.switch_to.frame("iframeResult")
# 实例化一个动作链对象,将浏览器对象加载到这个动作链对象中
actiOns= ActionChains(bro)
# 1. 定位“请拖拽我”标签
source_tag = bro.find_element_by_id("draggable")
# 2. 点击“请拖拽我”, 并拖动
actions.click_and_hold(source_tag)
for i in range(1, 6):
actions.move_by_offset(50,0)
time.sleep(1)
actions.perform() # 执行所有动作链
time.sleep(2)
bro.close()
十二、动作链,拖动iframe标签到指定的地方
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path=‘./chromedriver.exe‘)
bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
# 定位到页面中的iframe标签内部,这样才可以定位到它内部的标签
bro.switch_to.frame("iframeResult")
# 实例化一个动作链对象,将浏览器对象加载到这个动作链对象中
actiOns= ActionChains(bro)
# 1. 定位“请拖拽我”标签
source_tag = bro.find_element_by_id("draggable")
target_tag = bro.find_element_by_id(‘droppable‘)
# 点击并拖动,并丢弃
actions.click_and_hold(source_tag)
for i in range(1, 6):
actions.move_by_offset(30,0)
time.sleep(1)
actions.drag_and_drop(source_tag, target_tag)
actions.perform() # 执行所有动作链
bro.close()
十三、获取COOKIE
from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option(‘excludeSwitches‘, [‘enable-automation‘])
browser = webdriver.Chrome(‘./chromedriver.exe‘, optiOns=option)
browser.get(‘https://www.baidu.com‘)
print(browser.get_COOKIEs())
# browser.add_COOKIE({‘name‘: ‘name‘, ‘domain‘: ‘www.zhihu.com‘, ‘value‘: ‘germey‘})
# print(browser.get_COOKIEs())
# browser.delete_all_COOKIEs()
# print(browser.get_COOKIEs())
selenium自动化模块的应用