爬虫框架: selenium API使用介绍

文章目录

  • 一、背景
  • [二、selenium API使用](#二、selenium API使用)
    • [1. 定位页面元素](#1. 定位页面元素)
    • [2. 查看对象的方法](#2. 查看对象的方法)
    • [3. 查看节点文本内容](#3. 查看节点文本内容)
    • [4. 节点定位](#4. 节点定位)
    • [5. 窗口大小控制](#5. 窗口大小控制)
    • [6. 前后页面](#6. 前后页面)
    • [7. 刷新下当前页面](#7. 刷新下当前页面)
    • [8. 多窗口切换](#8. 多窗口切换)
    • [9. 输入框](#9. 输入框)
    • [10. 按键操作](#10. 按键操作)
  • 三、参考资料

一、背景

selenium(硒) 作为化学元素有提升身体机能的作用,作为软件是一个自动化web测试框架,旨在提升工作效率,解放劳动力。selenium同时可以用作爬虫框架,使用python编写,传统的爬虫使用request请求html进行解析,但是对于一些ajax动态渲染的页面则没法直接抓取到内容,因此selenium提出一种模拟人的鼠标点击、滚动的动作,通过操控浏览器界面的形式完成测试。所以selenium需要安装浏览器的控制驱动,通常安装chrome 驱动。软件框架如下,本文进行讲解selenium中的API使用。
python chromeDriver chromeBrower

二、selenium API使用

1. 定位页面元素

以CSDN为例

复制代码
from selenium import webdriver

# Chrome浏览器
driver = webdriver.Chrome()
driver.get('https://www.csdn.net/')

浏览后自动退出, 不quit就不会退出。设置不自动退出:

复制代码
# 不自动关闭浏览器
option = webdriver.ChromeOptions()
option.add_experimental_option("detach", True)

# 将option作为参数添加到Chrome中
driver = webdriver.Chrome(chrome_options=option)

2. 查看对象的方法

selenium中有很多类和对象,想要查看对象有哪些方法可以使用dir命令。

复制代码
print(dir(app))

3. 查看节点文本内容

print(app.text) : 查看节点的文本信息。

4. 节点定位

xml节点定位有多种方法,比如:id、name、xpath路径、css选择器、文本等方式。

1)id定位

复制代码
driver.find_element_by_id("toolbar-search-input")

2)name定位

text 复制代码
driver.find_element_by_name("keywords")

3)xpath定位

复制代码
# 绝对路径(层级关系)定位
driver.find_element_by_xpath(
 "/html/body/div/div/div/div[2]/div/div/input[1]")
# 利用元素属性定位
driver.find_element_by_xpath(
 "//*[@id='toolbar-search-input']"))
# 层级+元素属性定位
driver.find_element_by_xpath(
 "//div[@id='csdn-toolbar']/div/div/div[2]/div/div/input[1]")
# 逻辑运算符定位
driver.find_element_by_xpath(
 "//*[@id='toolbar-search-input' and @autocomplete='off']")

4)css 定位

复制代码
driver.find_element_by_css_selector('#toolbar-search-input')
driver.find_element_by_css_selector('html>body>div>div>div>div>div>div>input')

5)文本定位

link 专门用来定位文本链接,假如要定位下面这一标签。

text 复制代码
<div class="practice-box" data-v-04f46969="">加入!每日一练</div>

我们使用 find_element_by_link_text 并指明标签内全部文本即可定位。

text 复制代码
driver.find_element_by_link_text("加入!每日一练")

5. 窗口大小控制

1)设置窗口大小,在get步骤前后都可以设置窗口。

复制代码
driver.set_window_size(600, 800)

2)全屏显示

复制代码
driver.maximize_window()

6. 前后页面

1)可以在同一个标签页中多次get 页面,进入前后页面,而不是新的标签页。

复制代码
from time import sleep

driver = webdriver.Chrome()

# 访问CSDN首页
driver.get('https://www.csdn.net/')
sleep(2)
#访问CSDN个人主页
driver.get('https://blog.csdn.net/qq_43965708')
sleep(2)
#返回(后退)到CSDN首页
driver.back()
sleep(2)
#前进到个人主页
driver.forward()

2)在新的标签页中打开。 需要使用js脚本

复制代码
# 新标签中打开
js = "window.open('https://blog.csdn.net/qq_43965708')"
driver.execute_script(js)

7. 刷新下当前页面

复制代码
driver.refresh()

8. 多窗口切换

窗口是window对象,可以使用如下API进行切换。

复制代码
# 获取打开的多个窗口句柄
windows = driver.window_handles
# 切换到当前最新打开的窗口 最后一个窗口
driver.switch_to.window(windows[-1])
# 切换到第一个窗口
driver.switch_to.window(windows[0])

9. 输入框

输入找到元素对象,然后send_keys(''),注意get 完 sleep几秒等待页面刷新再获取页面元素。

python 复制代码
driver.get('https://www.csdn.net/')
sleep(2)
# 定位搜索输入框
text_label = driver.find_element_by_xpath('//*[@id="toolbar-search-input"]')

# 在搜索框中输入 Dream丶Killer
text_label.send_keys('Dream丶Killer')

sleep(2)
# 清除搜索框中的内容
text_label.clear()

# 输出搜索框元素是否可见
print(text_label.is_displayed())
# 输出placeholder的值
print(text_label.get_attribute('placeholder'))

# 定位搜索按钮
button = driver.find_element_by_xpath('//*[@id="toolbar-search-button"]/span')
# 输出按钮的大小
print(button.size)
# 输出按钮上的文本
print(button.text)

'''输出内容
True
python面试100问
{'height': 32, 'width': 28}
搜索
'''

tips: browser对象中保存了整个网页内容,在brower.get时保存到成员属性中了。

10. 按键操作

按键对象的click方法模拟鼠标左击的动作。

复制代码
playall_btn=browser.find_element_by_link_text('播放全部')
#print(browser.page_source)
playall_btn.click()

三、参考资料

https://zhuanlan.zhihu.com/p/480544218

https://pypi.org/project/selenium/

https://www.open-open.com/lib/view/open1413191207789.html

相关推荐
好开心啊没烦恼4 小时前
Python数据分析:使用爬虫从网页、社交媒体平台、论坛等公开资源提取中文和英文人名。
开发语言·爬虫·python·数据挖掘·数据分析
qq_402605656 小时前
python爬虫(三) ---- 分页抓取数据
开发语言·爬虫·python
shelter -唯7 小时前
基于selenium库的爬虫实战:京东手机数据爬取
爬虫·python·selenium
IDOlaoluo1 天前
Postman-win64-8.6.2-Setup安装教程(附详细步骤,Win64版Postman下载安装指南)
测试工具·postman
运维小菜鸟h1 天前
利用wxpython开发API接口调试工具,类似postman
测试工具·postman
深蓝电商API1 天前
Scrapy 中间件详解:自定义下载器与爬虫的 “拦截器”
爬虫·scrapy·中间件
浔川python社2 天前
网络爬虫技术规范与应用指南系列(xc—1)
数据库·爬虫
卓码软件测评2 天前
第三方应用测试:【移动应用后端API自动化测试:Postman与Newman的集成】
功能测试·测试工具·测试用例·可用性测试
深蓝电商API2 天前
解析动态数据:如何抓取 JavaScript 加载的 AJAX 内容
爬虫·python