一、selenium概念
用来完成浏览器自动化的相关操作
使用程序编写一系列的键盘、鼠标的相关操作(让浏览器来完成), 当我们执行代码时,就会触发一系列的事件
二、selenium在爬虫中的作用
可以获取动态加载的数据
三、selenium安装
pip install selenium
下载浏览器驱动程序: http://chromedriver.storage.googleapis.com/index.html (找到最接近的版本)
四、selenium使用
导包: from selenium import webdriver
实例化某一款浏览器的驱动,获取一个对象
使用对象中的相关方法制定一系列的事件(键盘、鼠标的相关操作)
五、自动访问百度
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()
九、phantomJS
# phantomJS import time from selenium import webdriver bro = webdriver.PhantomJS('./phantomjs.exe') bro.get("https://www.baidu.com") # 截图 bro.save_screenshot('11.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('21.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()
十一、动作链(一)
# 动作链 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()
十二、动作链(二)
# 动作链 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
# 获取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())