selenium简介
什么是selenium
selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。
selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;
selenium爬虫称之为可视化爬虫 主要是网页解析的爬虫方式 selenium爬虫主要是模拟人的点击操作 selenium驱动浏览器并进行操作的过程是可以观察到的 类似于你在看着 代码 在帮你操纵你的浏览器 当然了,selenium也有无界面模式
Selenium的核心Selenium Core基于JsUnit, 完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。 selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,
爬虫中主要用来解决JavaScript渲染问题。
用python写爬虫的时候,主要用的是selenium的Webdriver
selenium的用途
1)、selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。
2)、selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等…进而拿到网页渲染之后的结果,可支持多种浏览器
selenium是优缺点
1)优点
python常用的爬虫基本上都是通过requests模拟http通信的过程进行获取数据,但是requests无法解析js运行后的效果,而且面对一些复杂的场景,需要模拟实现非常麻烦,比如验证码,滑动验证等,登录等。
而selenium是模拟浏览器的访问操作,包括了页面的js渲染执行。也就是我们看到的数据都能获取到,而且支持界面操作,遇到复杂的滑动校验和需要登录时,可以在界面上操作, 这就是使用selenium的好处!
2)缺点
使用selenium本质上是驱动浏览器对目标站点发送请求,那浏览器在访问目标站点的时候,需要把静态资源都加载完毕。html、css、js这些文件都要等待它加载完成,速度特别慢。由于在获取页面的过程中会发送很多请求,所以效率非常低,所以在很多时候需要酌情使用。
Chromedriver的介绍
Chromedriver 也是一个能够被selenium驱动的浏览器,它是有界面的。Chromedriver下载你需要先查看自己的Chrome浏览器的版本,然后选择对应的Chromedriver。
PhantomJS
PhantomJS可以理解成是一个 没有可视化页面的浏览器。
PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。
PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试.
selenium的安装
下载selenium模块:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
或者在pycharm中下载
安装浏览器驱动
注意:Chromedriver和电脑上的chrome版本有对应关系,建议使用最新的Chromedriver版本并且更新chrome浏览器到最新版,如不更新则需要查看自己的chrome 浏览器版本。
1)、Google浏览器驱动 https://npm.taobao.org/mirrors/chromedriver
https://sites.google.com/a/chromium.org/chromedriver/downloads 注:把下载好的chromedriver.exe放到python安装路径的scripts目录中即可(其实放哪都可以,但是需要配环境变量,放Python安装目录下省事)
加入环境变量的方法 比如我的是 Mac OS,就把下载好的文件放在 /usr/bin 目录下就可以了。
2)、firefox浏览器驱动: selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver
下载链接:https://github.com/mozilla/geckodriver/releases
测试是否安装成功
from selenium import webdriver
browser=webdriver.Chrome() #实例化1个谷歌浏览器对象
browser.get('https://www.baidu.com/') #开始
selenium的基本使用
import time
from selenium import webdriver#驱动浏览器
from selenium.webdriver import ActionChains #滑动
from selenium.webdriver.common.by import By #选择器
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 #等待所有标签加载完毕
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕 寻找某些元素
browser=webdriver.Chrome() #调用Chrome 驱动,生成浏览器对象
wait=WebDriverWait(browser,10) #设置selenium等待浏览器加载完毕的最大等待时间
try:
browser.get('https://www.baidu.com/')
baidu_input_tag=browser.find_element_by_id("kw") #寻找到百度页面的id='kw'的标签
key=baidu_input_tag.send_keys('张小凡') #在标签中输入'张小凡'
baidu_button_tag=browser.find_element_by_id('su') #寻找到百度页面id='su'的标签
baidu_button_tag.click() #点击
wait.until(EC.presence_of_element_located((By.ID,'4'))) #等待百度页面 ID='4'的标签完毕,最大等待10秒
'''
请求相关:
browser.get('url')
响应相关:
print(browser.page_source) #显示网页源码
print(browser.current_url) #获取当前url
print(browser.get_cookies()) #获取当前网页cokies
'''
finally:
time.sleep(5)
browser.close() #关闭浏览器
更多文档
https://selenium-python-docs-zh.readthedocs.io/zh_CN/latest/
https://github.com/SeleniumHQ/selenium
https://selenium-python-zh.readthedocs.io/en/latest/index.html
https://www.selenium.dev/selenium/docs/api/py/api.html
|