(一)Selenium 简介
Selenium是一个 Web 的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同的是 Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器)。
Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。
Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS的工具代替真实的浏览器。
可以从 PyPI 网站下载 Selenium 库 http://pypi.python.org/simple/selenium,也可以用第三
方管理器 pip 命令安装:pip install selenium==版本号
如图所示:
(二)PhantomJS 简介
PhantomJS 是一个基于 Webkit 的“无界面”(headless)浏览器,它会把网站加载到内存并执行页面上JavaScript,因为不会展示图形界面,所以运行起来比完整的浏览器要高效。
如果我们把 Selenium 和 PhantomJS 结合在一起,就可以运行一个非常强大的网络爬虫了,这个爬虫可以处理 JavaScript、cookie、headers,以及任何我们真实用户需要做的事情。
注意:PhantomJS 只能从它的官方网站http://phantomjs.org/download.html)下载。因为PhantomJS 是一个功能完善(虽然无界面)的浏览器而非一个 Python 库,所以它不需要像Python 的其他库一样安装,但我们可以通过 Selenium 调用 PhantomJS 来直接使用。
(三)基础使用方法(结合PhantomJS使用)及百度搜索案例
如果使用其他浏览器,下载一个对应的浏览器驱动并调用该浏览器即可
注意:有些浏览器需要配置以后才可以用,配置教程可以百度,找不到可以私我.下方为大家介绍IE简单使用和PhantomJS使用
Chrome浏览器有些时候并不是很好用,相信大家以后会遇见的哈哈
比如使用IE浏览器,虽然现在IE没那么多人用了,但有些网站用IE还是很方便的,下面先为大家介绍IE的使用
IE浏览器的驱动我准备了两个常见的版本(IEDriverServer_2.48.0和IEDriverServer_3.141.0),大家也可以自行下载
需要注意的是,下载的驱动版本需要跟你安装的Selenium版本一致!!!
大家不用看链接里面的包是32位的,32和64的都可以用,放心下载
百度云IE驱动下载
提取码:98xi
IE的其他配置:
配置ie浏览器:https://www.cnblogs.com/misswjr/p/9453566.html
安装根证书,手动安装:https://inv-veri.chinatax.gov.cn/
# 1. 安装IE浏览器,安装ie的驱动,配置ie浏览器:https://www.cnblogs.com/misswjr/p/9453566.html
# 2. 安装根证书,手动安装:https://inv-veri.chinatax.gov.cn/
# 1. 导入webdriver
from selenium import webdriver
# 2. 调用IE浏览器
driver = webdriver.Ie(executable_path=r'D:\IE_drive\IEDriverServer.exe')
# 将浏览器窗口最大化,因为个人习惯每次都会写上这行代码,因为有些时候浏览器窗口不最大化,找不到一些元素
driver.maximize_window()
# 3. 请求
driver.get(url='要访问的url')
百度搜索案例
# 安装selenium:pip install selenium==3.141
# 步骤:
# 1. 导入webdriver
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# 2. 调用浏览器
driver = webdriver.PhantomJS(executable_path=r'D:\phantomjs-2.1.1-windows\bin\phantomjs.exe')
# 3. 访问页面
driver.get(url='https://www.baidu.com/')
# 属性及方法
# 1. title 获取标题
# print(driver.title) # 百度一下,你就知道
# 2. page_source 查看页面内容
# print(driver.page_source)
# 3. current_url 查看当前请求的URL
# print(driver.current_url)
# 4. get_cookies() 获取页面的所有cookie
# print(driver.get_cookies())
# 5. 查找元素
# 5.1 find_element_by_id('id的值') 根据id查找元素
# id_kw = driver.find_element_by_id('kw')
# print(id_kw) # <selenium.webdriver.remote.webelement.WebElement (session="87034e40-2ef8-11eb-9fcc-a5e1716ab51d", element=":wdc:1606293064468")>
# 5.2 find_elements_by_class_name('class的值') 根据class获取所有符合class值的元素,返回列表
# class_s_ipt = driver.find_elements_by_class_name('s_ipt')
# print(class_s_ipt)
# 5.3 find_element_by_xpath('xpath路径') 根据xpath查找元素
# input = driver.find_element_by_xpath('//input[@id="kw"]')
# print(input) # 是一个对象
# 6. text 获取标签之间的内容
# content = driver.find_element_by_xpath('//div[@id="s-top-left"]').text
# print(content)
# 7. get_attribute('属性名') 获取属性值
# class_s_ipt = driver.find_element_by_class_name('s_ipt').get_attribute('id')
# print(class_s_ipt) # kw
# 8. 截图
# driver.save_screenshot('baidu.png')
# 9. send_keys('输入的内容')
# 步骤:
# 1. 先获取文本框
# 2. 再输入内容
# driver.find_element_by_xpath('//input[@id="kw"]').send_keys('python')
# driver.save_screenshot('input_python.png')
# 10. click() 点击
# 与第九步一样,分两步走
# driver.find_element_by_xpath('//input[@id="kw"]').send_keys('python')
# driver.find_element_by_xpath('//input[@id="su"]').click()
# time.sleep(3)
# 这里让程序沉睡三秒,原因是页面加载需要时间,否则截图太快什么都获取不到
# driver.save_screenshot('click.png')
# 11. 支持快捷键
# 举例:全选和剪切
driver.find_element_by_xpath('//input[@id="kw"]').send_keys('python')
driver.save_screenshot('before_qx.png')
driver.find_element_by_xpath('//input[@id="kw"]').send_keys(Keys.CONTROL,'a')
driver.save_screenshot('qx.png')
driver.find_element_by_xpath('//input[@id="kw"]').send_keys(Keys.CONTROL,'x')
driver.save_screenshot('jq.png')