tiankele0 2020-04-15
一、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())
5.环境变量配置在linux系统下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里面方法一:将文件移动到属于环境变量目录中sudo mv chromedriver /user/bin