14.网络爬虫—selenium详讲

news2025/2/27 23:17:07

网络爬虫—selenium详讲

  • 一·selenium简介
    • Selenium 的优点
  • 二·安装模块
  • 三·设置浏览器驱动
      • 确认版本:
      • 查找对应驱动
      • 下载驱动
  • 四·使用模块
    • selenium选取元素方法
    • selenium嵌套页面元素定位
    • selenium网页下拉
    • selenium下拉表选择
    • selenium行为链
    • selenium等待
  • 五·错误解决方案
  • 六·结束语

前言
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证
📝​📝第一篇文章《1.认识网络爬虫》获得全站热榜第一,python领域热榜第一
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
🧾 🧾第十篇文章《10.网络爬虫—MongoDB详讲与实战》全站热榜第八,领域热榜第二
🧾 🧾第十三篇文章《13.网络爬虫—多进程详讲(实战演示)》全站热榜第十二
🎁🎁《Python网络爬虫》专栏累计发表十三篇文章,上榜五篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

一·selenium简介

🧾 🧾Selenium是一个自动化测试工具,用于测试Web应用程序。它可以模拟用户在Web浏览器中的操作,如点击链接、填写表单、提交表单等。

  • Selenium的主要特点是灵活性和可扩展性,它可以与其他工具和框架集成,如JUnitTestNGMavenAnt等。
  • Selenium的核心组件包括Selenium IDESelenium WebDriverSelenium Grid
  • Selenium IDE是一个浏览器插件,用于录制和回放测试脚本`;
  • Selenium WebDriver是一个自动化测试框架,用于编写和执行测试脚本
  • Selenium Grid是一个分布式测试框架,用于在多台计算机上并行执行测试脚本
  • Selenium在Web应用程序测试领域具有广泛的应用和影响力。

Selenium 的优点

1.跨平台:Selenium 可以在多种操作系统和浏览器上运行,可以在不同的环境中进行测试。
2. 灵活性:Selenium 提供了多种 API 和工具,可以根据具体需求进行定制化开发,满足不同的测试需求。
3. 易于学习:Selenium 的 API 简单易懂,学习成本较低,而且有丰富的文档和社区支持
4. 可扩展性:Selenium 可以与其他测试工具和框架集成,例如 TestNG、JUnit 等,从而实现更加完善的测试流程。

二·安装模块

🧾 在pycharm的终端输入安装模块的命令

 pip install selenium

在这里插入图片描述
可以使用清华源安装加快安装速度:

 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

三·设置浏览器驱动

确认版本:

🧾 博主使用的是谷歌浏览器,确认版本的方法如下:

点击右上的三个点->点击浏览器的设置->点击关于谷歌->查看版本(版本 112.0.5615.50(正式版本) (64 位))

在这里插入图片描述
在这里插入图片描述

查找对应驱动

http://chromedriver.storage.googleapis.com/index.html

查找和浏览器版本最近的一个驱动版本(版本向下兼容)

在这里插入图片描述
博主的浏览器版本是:版本 112.0.5615.50(正式版本) (64 位)
所以下载的是112.0.5616.28 向下兼容,所以可以正常使用。

下载驱动

下载chromedriver_win32.zip

系统是 64 位的,也可以使用 32 位的 ChromeDriver。因为 ChromeDriver
只是一个独立的可执行文件,它与您的操作系统架构无关。只要您的 Chrome 浏览器和 ChromeDriver
版本匹配,就可以在任何系统上运行 ChromeDriver。

解压chromedriver.exe 存放到一个位置(后续会使用)

注意点:
浏览器版本更新后,对应的驱动也需要更新才可以使用(可以去查找一下如何取消浏览器更新)

四·使用模块

🧾 我们以打开百度浏览器为例:

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

service = Service(executable_path='D:\chorm\chromedriver_win32/chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.set_window_size(1100, 850)  # 设置打开的窗口大小
driver.get('https://www.baidu.com/?tn=02003390_84_hao_pg&')  # 选择自动化操作页面

input()  # 加入input()是为了让程序暂停,等待用户输入任意字符后才继续执行下一步操作。

运行结果:
在这里插入图片描述

运行成功后,他会帮我们自动打开百度网页。我们可以看见上方出现chrome正受到自动测试软件的控制
在这里插入图片描述

加入input()是为了让程序暂停,等待用户输入任意字符后才继续执行下一步操作。这样做是为了防止程序执行完毕后自动关闭浏览器窗口,让用户有足够的时间观察程序的执行结果或手动进行后续操作。

selenium选取元素方法

  • find_element获取满足条件的第一个元素
  • find_elements获取满足条件的所有元素
序号方法描述
1find_element_by_id()通过ID定位元素
2find_element_by_name()通过name定位元素
3find_element_by_class_name()通过类样式名称定位元素
4find_element_by_tag_name()通过标签名称定位元素
5find_element_by_link_text()通过链接定位元素(a标签)
6find_element_by_css_selector()通过CSS定位元素
7find_element_by_xpath()通过xpath语法来获取元素

示例:

from selenium.webdriver.common.by import By

driver.find_element(By.ID, 'kw').send_keys('飞机')

在百度输入框自动输入夕阳两个字。

from selenium.webdriver.chrome.service import Service
from selenium import webdriver

service = Service(executable_path='D:\chorm\chromedriver_win32/chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.set_window_size(1100, 850)  # 设置打开的窗口大小
driver.get('https://www.baidu.com/?tn=02003390_84_hao_pg&')  # 选择自动化操作页面

from selenium.webdriver.common.by import By

driver.find_element(By.ID, 'kw').send_keys('夕阳')

input()  # 加入input()是为了让程序暂停,等待用户输入任意字符后才继续执行下一步操作。

接下来我们使用代码来操作,让它执行搜索功能:

在这里插入图片描述

selenium嵌套页面元素定位

import time

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By

service = Service(executable_path='D:\chorm\chromedriver_win32/chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get('https://tieba.baidu.com/')
# 方法1 直接使用嵌套的网页进行使用

# 跳转到嵌套网页
# 选取嵌套网页元素
element = driver.find_element(By.ID, 'iframeu6739266_0')
# 切换网页
driver.switch_to.frame(element)

driver.find_element(By.ID, 'title0').click()
time.sleep(5)

在这里插入图片描述

selenium网页下拉

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
import time

service = Service(executable_path='D:\chorm\chromedriver_win32/chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get('https://www.duitang.com/category/?cat=wallpaper')

s = 0
n = 100
for i in range(s, n, 5):  # 实现网页滑动下拉
    js = 'window.scrollTo(0,%s)' % (i * 100)
    driver.execute_script(js)
    time.sleep(0.5)

运行这段程序后,会自动打开堆糖网页,并且实现自动下拉页面,方便我们浏览。
在这里插入图片描述

selenium下拉表选择

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By

service = Service(executable_path='F:\chrom\chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get('https://kyfw.12306.cn/otn/regist/init')

from selenium.webdriver.support.ui import Select

select_element = driver.find_element(By.ID,'cardType')

select = Select(select_element)

在这里插入图片描述

selenium行为链

Selenium行为链(ActionChains)是Selenium中的一个Python库,它允许我们模拟用户的交互行为,例如鼠标移动、单击、双击、右键单击等。使用行为链,我们可以创建一个动作序列,然后将其执行在我们的Web应用程序上,从而模拟用户的行为。

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By

service = Service(executable_path='F:\chrom\chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get('https://www.baidu.com/')

action = ActionChains(driver)  # 在driver创建行为链对象

inp = driver.find_element(By.ID, 'kw')  # 获取到输入框位置
action.move_to_element(inp)  # 把鼠标移动到输入框
action.send_keys_to_element(inp, '百度贴吧')  # 模拟输入

btn = driver.find_element(By.ID, 'su')  # 获取搜索按钮
action.move_to_element(btn)  # 移动鼠标到搜索按钮
action.click(btn)  # 模拟点击

action.perform()  # 注意记得写 执行行为

在这里插入图片描述

selenium等待

from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located as PE

service = Service(executable_path='F:\chrom\chromedriver.exe')
driver = webdriver.Chrome(service=service)

driver.get('https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=')
# 肖申克的救赎
# 需要等待页面加载完成再执行打印
# time.sleep(5)
# print(driver.page_source)

wait = WebDriverWait(driver, 10)  # 等待10秒,有数据就进行操作,没有就报错
wait.until(PE((By.CLASS_NAME, 'rank-num'))).click()

print(driver.page_source)

在这里插入图片描述

在这里插入图片描述

五·错误解决方案

( 1)109.0.5414.75

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 86
Current browser version is 109.0.5414.75 with binary path C:\ProgramFiles\Google\Chrome\Application\chrome.exe

需要指定驱动位置

1.将驱动放置在代码的同级目录
2. 直接指定驱动的位置

(2) 浏览器闪退

selenium代码没有进行阻塞 和浏览器的驱动版本是有关系

如果想要阻塞 可以在代码最后加上sleep(10) 或者是input()

(3)运行代码出现警告

F:\pythonSpider2208\day14-selenium\selenium自动化.py:5: DeprecationWarning: executable_path has been deprecated, please pass in a Service object
  driver = webdriver.Chrome(executable_path=r'F:\chrom\chromedriver.exe')

需要我们更新代码,使用新的方式指定驱动位置(代码依然是可以正常使用的)

(4) 元素选择异常

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="wd"]"}

(5)元素没有选择到

检测value参数是否正确

六·结束语

👉👉本专栏所有文章是博主学习笔记,仅供学习使用,爬虫只是一种技术,希望学习过的人能正确使用它。
博主也会定时一周三更爬虫相关技术更大家系统学习,如有问题,可以私信我,没有回,那我可能在上课或者睡觉,写作不易,感谢大家的支持!!🌹🌹🌹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree

语义分析_抽象语法树_反汇编 回忆 上次回顾了一下历史 python 是如何从无到有的看到 Guido 长期的坚持和努力 python究竟是如何理解 print(“hello”)的?这些ascii字母如何被组织起来执行? 纯文本 首先编写Guido的简历 print("1982------Gui…

LeetCode刷题集(五)(LeetCode1.两数之和)

学习目标: 掌握LeetCode第一题两数之和 学习内容: LeetCode第一题两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会…

ASEMI代理AD9951YSVZ原装ADI车规级AD9951YSVZ

编辑:ll ASEMI代理AD9951YSVZ原装ADI车规级AD9951YSVZ 型号:AD9951YSVZ 品牌:ADI/亚德诺 封装:HTQFP-48 批号:2023 引脚数量:48 安装类型:表面贴装型 AD9951YSVZ汽车芯片 特征 400 MS…

shell编程实例 — 实现4G开机自动运行,实时监测,断线自动重拨》

shell编程实例 — 实现4G开机自动运行,实时监测,断线自动重拨》 往事只能回味味道 于 2021-11-20 02:30:53 发布831 收藏 1 分类专栏: shell 文章标签: ubuntu linux udp 版权 ​编辑shell专栏收录该内容 3 篇文章0 订阅 订阅…

Mysql日志系统-InnoDB引擎层

一、redo log日志 接下来的两个日志,是innodb为解决不同问题而引出的两类日志文件。 redo log(重做日志)的设计主要是为了防止因系统崩溃而导致的数据丢失,其实解决因系统崩溃导致数据丢失的思路如下: 1、每次提交事务…

SpringBoot解决用户重复提交订单(方式二:通过Redis实现)

文章目录 前言1、方案实践1.1、引入Redis依赖1.2、添加Redis环境配置1.3、编写获取请求唯一ID的接口,同时将唯一ID存入redis 1.4、编写服务验证逻辑,通过 aop 代理方式实现1.5、在相关的业务接口上,增加SubmitToken注解即可 2、小结 前言 在…

华润数科、京东科技、京彩未来携手共进,求解“科技×产业”最大值

4月18日,华润数科、京东科技、京彩未来三方代表在中国深圳签署三方合作协议。面向产业数字化的市场机遇,华润数科物联网事业部总经理刘楚明先生表示,华润数科作为华润集团重点培育的数字科技业务单元,基于技术优势及资源整合能力&…

在SAP中使用QUERY

在SAP中使用QUERY 一、SAP query介绍 ​ QUERY是SAP提供的方便无编程基础用户的报表工具,使用图形化的界面,让用户托托拽拽就能轻松完成报表编写。我们可以将Query理解成QuickView的高级版本,它在QuickView的基础上增加的功能有&#xff1a…

一、摄影基础课

目录 第一章 控制曝光1. 曝光及曝光三要素1.1 曝光1.2 光圈1.3 快门1.4 感光度(ISO)1.5 曝光三要素之间的关系 2. 曝光模式3. 测光模式4. 曝光补偿 第二章 控制对焦1. 对焦区域2. 对焦模式 第三章 控制色彩 第一章 控制曝光 1. 曝光及曝光三要素 1.1 曝…

尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

视频地址:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】尚硅谷大数据技术Zookeeper教程-笔记02【服务器动态上下线监听案例、ZooKeeper分布式锁案例、企业面试真…

外包干了4年,直接废了···

有一说一,外包没有给很高的薪资,是真不能干呀! 先说一下自己的情况,大专生,19年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了&#xff0…

[java/初学者]java常用API(1)——包装类

前言 在学习本课题之前,我们首先需要知道什么是API。 API,即Application Programming Interface,中文名称是“应用程序接口", 这些接口就是"jdk所提供"给我们使用的类,我们不需要去深究它是如何实现…

STM32+EC20实现4G无线通信

EC20是一款集成度非常高的4G无线通信模块,支持多种常见通信频段,能满足几乎所有的M2M(MachinetoMachine)应用需求。模块支持TCP/UDP/FTP等一众网络协议,内置多星座高精度定位GNSS接收机,快速提供准确的经纬度信息,UART…

vscode java环境扩展

下载安装jdk: Java Downloads | Oracle 下载安装maven: Maven – Download Apache Maven windows系统选择 Binary zip archive maven目录中的conf文件中有一个settins.xml文件 镜像&#xff08;mirrors&#xff09;二选一 <mirror><id>nexus-aliyun</…

影视动画设计有些SCI期刊推荐? - 易智编译EaseEditing

以下是几本影视动画设计方向的SCI期刊&#xff1a; ACM Transactions on Graphics: 该期刊是ACM&#xff08;Association for Computing Machinery&#xff0c;美国计算机协会&#xff09;下的一个子刊&#xff0c;涵盖了计算机图形学和交互技术等领域&#xff0c;也包括了动…

虚拟化技术 — 硬件辅助的虚拟化技术

目录 文章目录 目录硬件辅助的虚拟化技术概览CPU 虚拟化技术基于二进制翻译的全虚拟化技术&#xff08;Full-Virtualization&#xff09;需要改造 GuestOS 的半虚拟化技术&#xff08;Para-Virtualization&#xff09;Intel VT-x 硬件辅助的虚拟化技术&#xff08;Hardware-ass…

智芯Z20K11x串口printf重定向

智芯Z20K11x串口printf重定向 目录 智芯Z20K11x串口printf重定向前言1 串口代码编写2 Keil勾选MicroLIB库结束语 前言 智芯Z20K11x系列是基于ARM CORTEX M0的中低端微控制器&#xff0c;高达256K P FLASH 128K D FLASH&#xff0c;2路CANFD接口&#xff0c;4路UART/LIN接口&a…

综合能源系统中基于电转气和碳捕集系统的热电联产建模与优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

HashMap理解

简单介绍 HashMap是双列集合Map接口下的实现类&#xff0c;jdk1.8之前其数据结构是数组链表、jdk1.8之后是数组链表红黑树&#xff0c;是线程不安全的&#xff0c; 原理图&#xff1a; HashMap放值的过程&#xff1a; HashMap先是根据Hash算法算出key的hashcode码值&#xff0…

Vivado之VIO原理及应用

虚拟输入输出&#xff08;Virtual Input Output,VIO)核是一个可定制的IP核&#xff0c;它可用于实时监视和驱动内部FPGA的信号&#xff0c;如图所示。 可以定制VIO的输入和输出端口的数量与宽度&#xff0c;用于和FPGA设计进行连接。由于VIO核与被监视和驱动的设计同步&#xf…