Selenium请求库
一 介绍
1、selenium是什么?
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。
官网:http://selenium-python.readthedocs.io
2、为什么要用selenium?
selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。
selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等...进而拿到网页渲染之后的结果,可支持多种浏览器。
那么对于爬虫来说,用它有没有好处?有,好处就是可以帮我们避开一系列复杂的通信流程,例如在我们之前学习的requests模块,那么requests模块在模拟请求的时候是不是需要把素有的通信流程都分析完成后才能通过请求,然后返回响应。假如目标站点有一系列复杂的通信流程,例如的登录时的滑动验证等...那么你使用requests模块的时候是不是就特别麻烦了。不过你也不需要担心,因为网站的反爬策略越高,那么用户的体验效果就越差,所以网站都需要在用户的淫威之下降低安全策略。
再看一点requests请求库能不能执行js?是不是不能呀!那么如果你的网站需要发送ajax请求,异步获取数据渲染到页面上,是不是就需要使用js发送请求了。那浏览器的特点是什么?是不是可以直接访问目标站点,然后获取对方的数据,从而渲染到页面上。那这些就是使用selenium的好处!
那用它有没有坏处?使用selenium本质上是驱动浏览器对目标站点发送请求,那浏览器在访问目标站点的时候,是不是都需要把静态资源都加载完毕。html、css、js这些文件是不是都要等待它加载完成。是不是速度特别慢。那用它的坏处就是效率极低!所以我们一般用它来做登录验证。
二 安装
''' selenium支持多种浏览器,但是在使用前必须去下载与浏览器相对应的驱动。 ''' from selenium import webdriver # 谷歌浏览器 browser=webdriver.Chrome() # 火狐浏览器 browser=webdriver.Firefox() # 无界面浏览器 browser=webdriver.PhantomJS() # 苹果浏览器 browser=webdriver.Safari() # IE浏览器 browser=webdriver.Edge() ''' 安装selenium与谷歌驱动: selenium + chromedriver 下载selenium模块: pip3 install selenium 下载chromed浏览器驱动: 把下载好的chromedriver.exe放到python安装路径的scripts目录中即可,注意最新版本是2.38,并非2.9 - 国内镜像网站地址: http://npm.taobao.org/mirrors/chromedriver/2.38/ - 最新的版本去官网找: https://sites.google.com/a/chromium.org/chromedriver/downloads 验证安装: - 进入python解释器: >>> C:\Users\Administrator>python3 >>> Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)] on win32 >>> Type "help", "copyright", "credits" or "license" for more information. >>> from selenium import webdriver >>> driver=webdriver.Chrome() #弹出浏览器 >>> driver.get('https://www.baidu.com') >>> driver.page_source 注意: selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver 下载链接:https://github.com/mozilla/geckodriver/releases '''
三 基本使用
1、示例一
from selenium import webdriver # 用来驱动浏览器的 from selenium.webdriver import ActionChains # 破解滑动验证码的时候用的 可以拖动图片 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys # 键盘按键操作 from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的 from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素 import time try: driver = webdriver.Chrome() driver.get('https://www.baidu.com') wait = WebDriverWait(driver, 10) input_tag = wait.until(EC.presence_of_element_located((By.ID, 'kw'))) input_tag.send_keys('美女') input_tag.send_keys(Keys.ENTER) time.sleep(5) finally: driver.close()
2、示例二
from selenium import webdriver # 用来驱动浏览器的 from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.support import expected_conditions as EC # 和下面WebDriverWait一起用的 from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素 import time # 获取驱动浏览器配置信息对象,可对其信息进行修改 option = webdriver.ChromeOptions() # 通过add_argument为配置添加参数 # 此参数用于跳过 "正受到自动测试软件的控制" option.add_argument('disable-infobars') driver = webdriver.Chrome(chrome_options=option) try: # 往NBA官网发送g