python—Selenium

简介

        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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值