Python 爬虫入门到精通——Selenium
1、概述
selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。 我们可以利用selenium提供的各项功能。 帮助我们完成数据的抓取。
2、安装
pip install selenium
说明:它与其他库不同的地方是他要启动你电脑上的浏览器, 这就需要一个驱动程序来辅助.
3、自动化浏览器驱动下载
3.1 chrome浏览器
我个人喜欢用chrome浏览器
chrome驱动下载地址 根据项目可以自定义驱动位置
下载说明,需要检查确认自己的Chrome浏览器的版本
3.1.1 确认Chrome浏览器的版本
1.打开Chrome浏览器,点击右上角的三个点样式图标,然后先帮助,再点击关于 Google Chrome
3.2 火狐浏览器驱动下载以及使用
火狐浏览器和Chrome浏览器类似,
下载驱动后直接放在python 的安装环境位置即可
from selenium import webdriver
from selenium.webdriver.common.by import By
web = webdriver.Firefox()
web.maximize_window()
4、selenium的三种等待方式
4.1.强制等待
使用方法:time.sleep(delay)
delay的单位为秒,delay设置多少秒页面就会等待多少秒(死等),
缺点:
这个方法很容易让线程挂掉,使程序抛异常,
所以要慎用此方法。
使用举例:打开百度,强制等待10秒
#导入强制等待模块
import time
from selenium import webdriver
wd = webdriver.Chrome()
wd.get('https://www.baidu.com')
#强制等待10秒
time.sleep(10)
4.2 隐式等待
web.implicitly_wait(),隐性等待设置了一个时间,在一段时间内网页是否加载完成,如果完成了,就进行下一步;在设置的时间内没有加载完成,则会报超时加载。
缺点是不智能,因为随着ajax技术的广泛应用,页面的元素往往都可以时间局部加载,也就是在整个页面没有加载完的时候,可能我们需要的元素已经加载完成了,那就么有必要再等待整个页面的加载,执行进行下一步,而隐性等待满足不了这一点;
另外一点,隐性等待的设置时全局性的,在开头设置过之后,整个的程序运行过程中都会有效,都会等待页面加载完成;不需要每次设置一遍;
4.3. 显示等待
显式等待(自动化web测试使用,爬虫基本不用)
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10,0.5).until( EC.presence_of_element_located((By.ID, "myDynamicElement"))
# 显式等待指定某个条件,然后设置最长等待时间10,在10秒内每隔0.5秒使用指定条件去定位元素,如果定位到元素则直接结束等待,如果在10秒结束之后仍未定位到元素则报错
5、selenium 无头浏览器
opt.add_argument('--disable-gpu')
opt.add_experimental_option('excludeSwitches', ['enable-automation'])
opt.add_experimental_option('useAutomationExtension', False)
opt.add_argument('--disable-blink-features=AutomationControlled')
opt.add_argument("start-maximized")
opt.add_argument("enable-automation")
opt.add_argument("--headless")
opt.add_argument("--no-sandbox")
opt.add_argument("--disable-infobars")
opt.add_argument("--disable-dev-shm-usage")
opt.add_argument("--disable-browser-side-navigation")
opt.add_argument("--window-size=1920,1080")