简介
Selenium 是一个 Web自动化框架。
通过它,我们可以写出自动化程序,自动操纵浏览器web界面。 比如点击界面按钮,在文本框中输入文字等操作。而且还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 等等,然后用程序进行分析处理。
安装
pip install selenium
然后浏览器还要有驱动
chrome驱动下载地址 chromedriver.storage.googleapis.com/index.html
将其放在chrome的安装目录下
并添加该目录到环境遍历path里面 C:\Program Files (x86)\Google\Chrome\Application
示例
from selenium import webdriver # 创建 WebDriver 对象,指明使用chrome浏览器驱动 wd = webdriver.Chrome() # 调用WebDriver 对象的get方法 可以让浏览器打开指定网址 wd.get('https://www.baidu.com')
自动打开chrome浏览器然后打开www.baidu.com
选择元素
对于百度搜索页面,如果我们想自动化输入 python ,怎么做呢?
这就是在网页中,操控界面元素。web界面自动化,要操控元素,首先需要
选择
界面元素 ,或者说定位
界面元素。就是 先告诉浏览器,你要操作哪个
界面元素, 让它找到你要操作的界面元素。根据 元素的id 属性选择元素
我们可以把 id 想象成元素的编号, 是用来在html中标记该元素的。 根据规范, 如果元素有id属性 ,这个id 必须是当前html中唯一的。所以如果元素有id, 根据id选择元素是最简单高效的方式。
这里,百度搜索框 元素的 id值为 kw
from selenium import webdriver # 创建 WebDriver 对象,指明使用chrome浏览器驱动 wd = webdriver.Chrome() # 调用WebDriver 对象的get方法 可以让浏览器打开指定网址 wd.get('https://www.baidu.com') # 根据id选择元素,返回的就是该元素对应的WebElement对象 element = wd.find_element_by_id('kw') # 通过该 WebElement对象,就可以对页面元素进行操作了 # 比如输入字符串到 这个 输入框里 element.send_keys('hxx\n')
根据class属性选择元素
如果网页对应的html是这样的
所有的植物元素都有个class属性 值为 plant。
所有的动物元素都有个class属性 值为 animal。
如果我们要选择 所有的 动物, 就可以使用方法
find_elements_by_class_name
。from selenium import webdriver # 创建 WebDriver 实例对象,指明使用chrome浏览器驱动 wd = webdriver.Chrome() # WebDriver 实例对象的get方法 可以让浏览器打开指定网址 wd.get('http://f.python3.vip/webauto/sample1.html') # 根据 class name 选择元素,返回的是 一个列表 # 里面 都是class 属性值为 animal的元素对应的 WebElement对象 elements = wd.find_elements_by_class_name('animal') # 取出列表中的每个 WebElement对象,打印出其text属性的值 # text属性就是该 WebElement对象对应的元素在网页中的文本内容 for element in elements: print(element.text)
根据tag名选择元素
类似的,我们可以通过方法
find_elements_by_tag_name
,选择所有的tag名为 div的元素from selenium import webdriver wd = webdriver.Chrome() wd.get('http://f.python3.vip/webauto/sample1.html') # 根据 tag name 选择元素,返回的是 一个列表 # 里面 都是 tag 名为 div 的元素对应的 WebElement对象 elements = wd.find_elements_by_tag_name('div') # 取出列表中的每个 WebElement对象,打印出其text属性的值 # text属性就是该 WebElement对象对应的元素在网页中的文本内容 for element in elements: print(element.text)
一些操作
自定义窗口大小、最大化、截图、自动关闭窗口
from selenium import webdriver import time #打开一个浏览器 driver = webdriver.Chrome() #发送请求 driver.get("https://www.baidu.com/") #元素定位 driver.find_element_by_id("kw").send_keys("python") driver.find_element_by_xpath('//*[@id="su"]').click() #自定义窗口大小 #driver.set_window_size(1920,1080) #最大化窗口 driver.maximize_window() time.sleep(5) #截图 driver.save_screenshot('a.png') #自动关闭当前窗口 #driver.close() #自动关闭浏览器 #driver.quit()
输出爬到的页面的内容
from selenium.webdriver import Chrome url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_1#tab2' brower = Chrome() brower.get(url) print(brower.page_source)
如果页面是用js动态渲染的,那么这些数据普通爬虫是爬不到的,selenium可以
无头模式
不用打开浏览器,能够在后台自动加载数据,能够大幅提高效率
from selenium.webdriver import Chrome,ChromeOptions option = ChromeOptions() option.add_argument("--headless")#隐藏浏览器 option.add_argument("--no-sandbox") #禁用沙盘 部署在linux上访问chrome要求这样 brower = Chrome(options = option)