赞
踩
selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏。而爬虫中使用它主要是为了解决requests无法执行javaScript代码的问题。
selenium模块本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器;
selenium爬虫称之为可视化爬虫
主要是网页解析的爬虫方式
selenium爬虫主要是模拟人的点击操作
selenium驱动浏览器并进行操作的过程是可以观察到的
类似于你在看着 代码 在帮你操纵你的浏览器
当然了,selenium也有无界面模式
Selenium的核心Selenium Core基于JsUnit,
完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,
爬虫中主要用来解决JavaScript渲染问题。
用python写爬虫的时候,主要用的是selenium的Webdriver
1)、selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用浏览器自动访问目标站点并操作,那我们也可以拿它来做爬虫。
2)、selenium本质上是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等…进而拿到网页渲染之后的结果,可支持多种浏览器
1)优点
python常用的爬虫基本上都是通过requests模拟http通信的过程进行获取数据,但是requests无法解析js运行后的效果,而且面对一些复杂的场景,需要模拟实现非常麻烦,比如验证码,滑动验证等,登录等。
而selenium是模拟浏览器的访问操作,包括了页面的js渲染执行。也就是我们看到的数据都能获取到,而且支持界面操作,遇到复杂的滑动校验和需要登录时,可以在界面上操作, 这就是使用selenium的好处!
2)缺点
使用selenium本质上是驱动浏览器对目标站点发送请求,那浏览器在访问目标站点的时候,需要把静态资源都加载完毕。html、css、js这些文件都要等待它加载完成,速度特别慢。由于在获取页面的过程中会发送很多请求,所以效率非常低,所以在很多时候需要酌情使用。
Chromedriver 也是一个能够被selenium驱动的浏览器,它是有界面的。Chromedriver下载你需要先查看自己的Chrome浏览器的版本,然后选择对应的Chromedriver。
PhantomJS可以理解成是一个 没有可视化页面的浏览器。
PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。
PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试.
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/local/bin 目录下就可以了。
sudo cp ./chromedriver /usr/local/bin/
andrew@macbook:~/Downloads#sudo chmod +x /usr/local/bin/chromedriver
检查:终端输入
ls /usr/local/bin/chromedriver
看到bin目录下确实看到了文件chromedriver,说明成功了
注意,也可以添加到 /usr/bin,不过会遇到Operation not permitted
原因
没有权限的提示信息,operation not permitted,和Read-Only filesystem错误,这是因为Mac系统有一个 System Integrity Protection (SIP) 系统完整性保护,如果此功能不关闭,是无法移动到 /usr/bin 目录下的
解决方案参考:
办法:
1、Mac关机
2、开机,并按住command+R键,直到出现苹果logo及进度条
3、你会进入到恢复模式,选择上方实用工具下的终端,进入终端
4、在终端输入命令csrutil disable,然后关闭终端。(如果要重新开启,同样的方法输入csrutil enable)
5、电脑重启后,进入终端,cd到文件位置,运行下面的代码,增加写的权限
sudo mount -uw /
6、再运行mv命令
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/') #开始
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。