【Python】【进阶篇】二十四、Python爬虫的Selenium的基本用法

这篇具有很好参考价值的文章主要介绍了【Python】【进阶篇】二十四、Python爬虫的Selenium的基本用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二十四、Python爬虫的Selenium的基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。

24.1 定位节点

Selenium 提供了 8 种定位单个节点的方法,如下所示:

定位节点方法 方法 | 说明 ---|--- find_element_by_id() | 通过 id 属性值定位 find_element_by_name() | 通过 name 属性值定位 find_element_by_class_name() | 通过 class 属性值定位 find_element_by_tag_name() | 通过 tag 标签名定位 find_element_by_link_text() | 通过 标签内文本定位,即精准定位。 find_element_by_partial_link_text() | 通过 标签内部分文本定位,即模糊定位。 find_element_by_xpath() | 通过 xpath 表达式定位 find_element_by_css_selector() | 通过 css 选择器定位

假设下面代码某个页面的代码片段,如下所示:


<html>
<head>
<body link="#cc0916">
  <a id="logo" href="http://c.biancheng.net" onclick="">
   <form id="form" class="fm" name="f" action="c.biancheng.net">
    <span class="btn"></span>
    <input id="kw" class="s_ipt_wr" name="wd" value="" maxlength="255" autocomplete="off">
</body>
</head>
</html>

下面使用表格中提供的方法定位 input 输出框。如下所示:

#创建browser是浏览器对象
browser = webdriver.Chrome()
#访问某个url得到上述代码片段
browser.get('url')
#通过id定义输入框
browser.dr.find_element_by_id("kw")
#通过class定义
browser.find_element_by_class_name("s_ipt_wr")
#通过name定位
browser.find_element_by_name("wd")
#通过tag name定位:
browser.find_element_by_tag_name("input")
#通过xpath定位
browser.find_element_by_xpath("//*[@id='kw']")
#通过css选择器定位
browser.find_element_by_css_selector("#kw")

通过 a 标签内的文本内容定位节点,如下所示:

<a class="vip" href="http://c.baincheng.net">C语言中文网</a>
<a class="search" href="http://www.baidu.com">hao123</a>

示例如下:

#使用全部文本内容定位链接
browser.find_element_by_link_text("c语言中文网")
#使用部分文本内容定位链接
browser.find_element_by_partial_link_text("123")

如果您想定位一组元素,方法如下所示:

find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()

定位一组元素的方法与定位单个元素类似,唯一的区别就是 element 后面多了一个 s(表示复数),因此上述方法的返回值是一个列表,您可以使用 for
循环拿到所有的元素节点。

24.2 控制浏览器

Selenium 可以操控浏览器的窗口大小、刷新页面,以及控制浏览器的前进、后退等

1) 设置浏览器窗口大小、位置
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#参数数字为像素点
driver.set_window_size(480, 800)
#设置窗口位置
driver.set_window_position(100,200)
#同时设置窗口的大小和坐标
driver.set_window_rect(450,300,32,50)
#退出浏览器
driver.quit()
2) 控制网页前进、后退、刷新页面
from selenium import webdriver

driver = webdriver.Chrome()
# 访问C语言中文网首页
first_url= 'http://c.biancheng.net'
driver.get(first_url)

# 访问c语言教程
second_url='http://c.biancheng.net/c/'
driver.get(second_url)

# 返回(后退)到c语言中文网首页
driver.back()

# 前进到C语言教程页
driver.forward()

# 刷新当前页面相当于F5
driver.refresh() 

# 退出/关闭浏览器
driver.quit()

24.3 WebDriver常用方法

上文中介绍了如何定位元素,以及如何设置浏览的大小、位置。 定位元素节点只是第一步, 定位之后还需要对这个元素进行操作, 比如单击按钮,或者在输入框输入文本
, 下面介绍 WebDriver 中的最常用方法:


# 请求url
get(url)
# 模拟键盘输入文本
send_keys (value)
# 清除已经输入的文本
clear()# 单击已经定位的元素
click()# 用于提交表单,比如百度搜索框内输入关键字之后的“回车” 操作
submit()#返回属性的属性值,返回元素的属性值,可以是id、name、type 或其他任意属性
get_attribute(name)
# 返回布尔值,检查元素是否用户可见,比如 display属性为hidden或者none
is_displayed() 

示例如下:

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
#模拟键盘,输出文本
driver.find_element_by_id("kw").send_keys("C语言中文网")
#单击“百度”一下查找
driver.find_element_by_id("su").click()
time.sleep(3)
#退出浏览器
driver.quit()

除了上述方法外, WebDriver 还有一些常用属性,如下所示:

from selenium import webdriver
driver = webdriver.Chrome()
# 获取HTML结构源码
driver.page_source
#在源码中查找指定的字符串
driver.page_source.find('字符串')
# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print(text)
# 获取输入框的尺寸
size = driver.find_element_by_id('kw').size
print(size)

输出结果:

©2015 Baidu 使用百度前必读 意见反馈 京 ICP 证 030173 号

{'width': 500, 'height': 22}

24.4 Selenium事件处理

Selenium WebDriver 提供了一些事件处理函数(鼠标、键盘等),下面我们对常用的事件函数做简单介绍。

1) 鼠标事件

Selenium WebDriver 将关于鼠标的操作方法都封装在 ActionChains 类中,使用时需要引入 ActionChains 类,如下所示:

from selenium.webdriver.common.action_chains import ActionChains

该类包含了鼠标操作的常用方法:

鼠标事件 方法 说明
ActionChains(driver) 构造 ActionChains 鼠标对象。
click() 单击
click_and_hold(on_element=None) 单击鼠标左键,不松开
context_click() 右击
double_click() 双击
drag_and_drop() 拖动
move_to_element(above) 执行鼠标悬停操作
context_click() 用于模拟鼠标右键操作, 在调用时需要指定元素定位。
perform() 将所有鼠标操作提交执行。

示例如下:

from selenium import webdriver
#导入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("http://c.biancheng.net")
# 通过xpath表达式定位到要悬停的元素
above = driver.find_element_by_xpath('//ul[@id="ad-link-top"]/li[1]')
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
2) 键盘事件

Selenium WebDriver 的 Keys 模块提供了模拟键盘输入的 send_keys()
方法,除此之外,该模块也提供了操作键盘的其他方法,比如复制、粘贴等等。

在使用之前,首先需要导入 Keys 类,如下所示:

from selenium.webdriver.common.keys import Keys

下面列举了一些常用方法:

键盘操作 方法 说明
send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1…Fn) 键盘 F1…Fn
keys.down(value,element=None) 按下键盘上的某个键
keys.up(value,element=None) 松开键盘上的某个键

示例如下:

from selenium import webdriver
# 引入 Keys 模块
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("C语言中文网H")

# 删除多输入的一个H
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
#单击“百度”一下查找
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()

其它键盘操作方法,如下所示:

# 输入空格键 + “Python教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("Python教程")

# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')

# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')

# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')

# 使用回车键来代替单击操作click
driver.find_element_by_id("su").send_keys(Keys.ENTER)

24.5 无界面浏览器

Chromedriver 每一次运行都要打开浏览器,并执行相应的输入、搜索等操作,这样会导致浏览器交互能力变差,浪费许多时间。 Selenium
为了增强浏览器的交互能力,允许您使用无头浏览器模式,也就是无界面浏览器,它被广泛的应用于爬虫和自动化测试中。通过以下代码可以设置无头浏览器模式:

from selenium import webdriver
import time
options=webdriver.ChromeOptions()
options.add_argument('--headless')#无界面浏览
driver=webdriver.Chrome(options=options)
driver.get('https://www.baidu.com')
kw1=driver.find_element_by_id('kw')
print(driver.title)
time.sleep(3)
#关闭当前界面,只有一个窗口
driver.close()
#关闭所有界面
driver.quit()

除了可以设置无头界面之外,Selenium 还支持其他一些浏览器参数设置,如下所示:

opption.add_argument('--window-size=600,600') #设置窗口大小
opption.add_argument('--incognito') #无痕模式
opption.add_argument('--disable-infobars') #去掉chrome正受到自动测试软件的控制的提示
opption.add_argument('user-agent="XXXX"') #添加请求头
opption.add_argument("--proxy-server=http://200.130.123.43:3456")#代理服务器访问
opption.add_experimental_option('excludeSwitches', ['enable-automation'])#开发者模式
opption.add_argument('blink-settings=imagesEnabled=false')  #禁止加载图片
opption.add_argument('lang=zh_CN.UTF-8') #设置默认编码为utf-8
opption.add_extension(create_proxyauth_extension(
            proxy_host='host',
            proxy_port='port',
            proxy_username="username",
            proxy_password="password"
        ))# 设置有账号密码的代理
opption.add_argument('--disable-gpu')  # 这个参数可以规避谷歌的部分bug
opption.add_argument('--disable-javascript')  # 禁用javascript
opption.add_argument('--hide-scrollbars')  # 隐藏滚动条

24.6 执行JS脚本

WebDriver 提供了 execute_script() 方法来执行 JavaScript 代码,比如控制浏览器的滚动条。示例如下:

from selenium import webdriver
from time import sleep

# 访问百度
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
# 最大化浏览器窗口
driver.maximize_window()
# 搜索
driver.find_element_by_id("kw").send_keys("C语言中文网")
driver.find_element_by_id("su").click()
sleep(3)

# 通过js代码设置滚动条位置,数值代表(左边距,上边距)
js="window.scrollTo(100,500);"
#执行js代码
driver.execute_script(js)
sleep(5)
driver.quit()

如果想了解更多关于 Selenium 的知识,请参考官方文档文章来源地址https://www.toymoban.com/news/detail-439839.html

到了这里,关于【Python】【进阶篇】二十四、Python爬虫的Selenium的基本用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python Selenium基本用法

    Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性值定位 find_element_by_name() 通过 name 属性值定位 find_

    2024年02月12日
    浏览(42)
  • Go分布式爬虫(二十四)

    爬虫项目的一个重要的环节就是把最终的数据持久化存储起来,数据可能会被存储到 MySQL、MongoDB、Kafka、Excel 等多种数据库、中间件或者是文件中。 之前我们爬取的案例比较简单,像是租房网站的信息等。但是实际情况下,我们的爬虫任务通常需要获取结构化的数据。例如一

    2023年04月20日
    浏览(43)
  • Python中的selenium库的基本用法

    Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。 通过此行代码可以快速在Python中安装selenium库 pip install Selenium 另外,我们仍需要安装浏览器驱动 Selenium3.x调用浏览器必须有一个webdr

    2023年04月20日
    浏览(42)
  • python爬虫教程:selenium常用API用法和浏览器控制

    selenium api selenium 新版本( 4.8.2 )很多函数,包括元素定位、很多 API 方法均发生变化,本文记录以 selenium4.8.2 为准。 webdriver 常用 API 方法 描述 get(String url) 访问目标url地址,打开网页 current_url 获取当前页面url地址 title 获取页面标题 page_source 获取页面源代码 close() 关闭浏览器当

    2024年02月05日
    浏览(55)
  • Python爬虫——selenium的安装和基本使用

    1.什么是selenium? selenium是一个用于web应用程序测试的工具 selenium测试直接运行在浏览器中,就像真正的用户在操作一样 支持通过各种driver(FrifoxDriver,ItenrentExploreDriver,OperaDriver,ChromeDriver )驱动 selenium也是支持无界面浏览器操作的 2.为什么使用selenium? 模拟浏览器功能,

    2024年02月13日
    浏览(53)
  • 【Python从入门到进阶】35、selenium基本语法学习

    接上篇《34、selenium基本概念及安装流程》 上一篇我们介绍了selenium技术的基础概念以及安装和调用的流程,本篇我们来学习selenium的基本语法,包括元素定位以及访问元素信息的操作。 Selenium元素定位是指通过特定的方法在网页中准确定位到需要操作的元素,例如按钮、文本

    2024年02月09日
    浏览(47)
  • Python爬虫进阶(1),Django+Selenium+Mysql+SimpleUI,从零开始搭建自己的爬虫后台管理系统

    如果爬虫做完的话都会发现每个文件要么保存到csv或者是其他格式的文件中,这样做多少会有些麻烦,所以需要将这些内容保存起来方便自己管理和查看内容。 相对于flask而言Django有着相对成熟的一个后台管理系统配合上其他一些插件就可以做到即插即用的效果而不用自己再

    2024年02月08日
    浏览(43)
  • 【Python从入门到进阶】34、selenium基本概念及安装流程

    接上篇《33、使用bs4获取星巴克产品信息》 上一篇我们介绍了如何使用bs4来解析星巴克网站,获取其产品信息。本篇我们来了解selenium技术的基础。 Selenium是一种用于自动化Web浏览器操作的开源工具。它提供了一组API(应用程序接口),使开发人员能够使用多种编程语言(如

    2024年02月10日
    浏览(35)
  • 【Python】WebUI自动化—Selenium的下载和安装、基本用法、项目实战(16)

    Selenium 是一个用于测试 Web 应用程序 的自动化测试工具,它直接运行在 浏览器 中,实现了对浏览器的自动化操作,它支持所有主流的浏览器,包括 IE,Firefox,Safari,Chrome 等。 -支持所有主流平台(如, Windows、Linux、IOS、Android、Edge、Opera 等) 实现了诸多 自动化功能 ,比如

    2024年02月08日
    浏览(48)
  • python爬虫进阶篇:Scrapy中使用Selenium模拟Firefox火狐浏览器爬取网页信息

    接着上一篇的笔记,Scrapy爬取普通无反爬、静态页面的网页时可以顺利爬取我们要的信息。但是大部分情况下我们要的数据所在的网页它是动态加载出来的(ajax请求后传回前端页面渲染、js调用function等)。这种情况下需要使用selenium进行模拟人工操作浏览器行为,实现自动化

    2024年02月04日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包