selenium基础知识 和 模拟登录selenium版本

前言

selenium框架是Python用于控制浏览器的技术,在Python爬虫获取页面源代码的时候,是最重要的技术之一,通过控制浏览器,更加灵活便捷的获取浏览器中网页的源代码。

还没有安装启动selenium的同志请先看我的上一篇文章进行配置启动 和 XPath基础

对selenium进行浏览器和驱动进行配置Windows | Linux_使用 selenium 进行谷歌-CSDN博客

Python爬虫 XPath 三方库lxml-CSDN博客

这里就直接从基础操作进行分享

目录

selenium打开和关闭网站

在打开网站时获取网站信息常用方法

使用selenium操作浏览器的常用方法

使用XPath定位浏览器具体地方常用方法

selenium等待页面加载技术

对浏览器交互操作常用方法

模拟真人的浏览器驱动常见配置

实战案例


selenium打开和关闭网站

#初始化浏览器驱动
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(driver_version="谷歌浏览器版本").install()))#使用浏览器驱动打开网站
driver.get("https://www.example.com")#关闭浏览器
driver.quit()

在打开网站时获取网站信息常用方法

我们的操作都是使用浏览器驱动调用的,所以获取网站的方法都是浏览器驱动对象driver调用的

#获取网站的源代码
driver.page_source#获取网站的截图
driver.save_screenshot("图片的相对路径/图片名称带图片格式")

我们在爬虫使用这个工具就是为了获取网站源码和截图,后面过滤数据有专业的相关技术

对其他方法感兴趣有空可以看他的官方文档,编程知识太多了,只学调用方法最常用的和知道内部原理,遇到使用再对调用方法进行查询使用

使用selenium操作浏览器的常用方法

selenium操作浏览器本质上就是使用XPath对浏览器的具体地方进行定位,然后使用点击事件操作

XPath定位类似于你的鼠标移动的位置

点击、下滑事件类似于你使用鼠标进行点击、下滑等操作

使用XPath定位浏览器具体地方常用方法

注意: 这里编写的XPath只能写到到元素,不能直接获取标签的属性值和内容,可以认为类似于移动鼠标,后面得到这个标签对象才能再进行处理,不然会报错

不推荐使用其他方式进行元素定位,在实战中非常复杂,也只有XPath使用起来可以应对,而且XPath也是Python爬虫数据过滤的最重要的技术,这个一定要非常熟练

from selenium.webdriver.common.by import By#这个方法只返回一个标签对象
#这里XPath只能定位到标签,不能取具体的值,不然报错
title = driver.find_element(By.XPATH,"XPath表达式")#这个方法是以集合的形式返回多个标签对象,没有标签返回空集合不会报错,遍历使用
titles = driver.find_elements(By.XPATH,"XPath表达式")#返回了Web标签对象,我们就可以对这个标签对象上面的属性值和内容进行获取了
#获取这个Web标签的内容
title.text
#获取这个Web标签中的属性值
title.get_attribute('属性名')

selenium等待页面加载技术

等待,直到获取到自己需要的web才往下执行,可以巧妙的解决网页加载时间长但是不知道设置多长等待时间的问题

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait#等待通过XPath获取的元素获取到之后再往下进行title = WebDriverWait(driver, 最长等待时间).until(EC.presence_of_element_located((By.XPATH,'XPath表达式'))  )

对浏览器交互操作常用方法

前面我们已经对需要操作的元素使用XPath进行获取了,接下来我们要对这个元素进行点击、输入表单文字等操作

ActionChains是一个链式操作,一直往下点就可以了以ActionChains(浏览器驱动对象)开头

perform()提交结尾

交互操作的库
from selenium.webdriver import ActionChains# 绑定到浏览器驱动对象
actions = ActionChains(浏览器驱动对象)# 对前面使用XPath定位返回的Web元素对象进行操作# 左键点击
click(Web元素对象)# 双击          
double_click(Web元素对象)# 右键点击
actions.context_click(Web元素对象)# 悬停在元素上
move_to_element(Web元素对象)# 相对当前位置移动
单位是像素
水平方向x:向右为正,向左为负
垂直方向y:向下为正,向上为负
move_by_offset(x, y)#使用鼠标从web起始元素拖拽到web目标元素
actions.drag_and_drop(web起始元素, web目标元素)#在web元素上面输入内容
send_keys(输入的内容)#中间可以加入停顿方法
pause(秒数)#提交,链式调用结尾
perform()

模拟真人的浏览器驱动常见配置

from selenium.webdriver.chrome.options import Optionsoptions = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36")
options.add_argument("--window-size=1920,1080")  # 设置窗口大小
options.add_argument("--disable-blink-features=AutomationControlled")  # 禁用自动化控制特征
options.add_argument("--disable-infobars")  # 禁用提示条
options.add_argument("--no-sandbox")  # 解决DevToolsActivePort文件不存在的报错
options.add_argument("--disable-dev-shm-usage")  # 禁用共享内存
options.add_argument("--disable-extensions")  # 禁用扩展
options.add_argument("--disable-gpu")  # 禁用GPU加速
options.add_argument("--disable-javascript")  # 禁用JavaScript(根据需求调整)
options.add_argument("--incognito")  # 隐身模式
options.add_argument("--headless")  # 无头模式(可选,等调试好了可以设置为无头减少资源浪费)driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(driver_version="谷歌浏览器版本").install()), options=options)

实战案例

查看淘宝详情商品,商品详情页面需要登录状态才可以查看全部内容,点击淘宝详情页面上面的一键登录进行模拟登录之后,获取到该商品详情页面的全部源代码

后面就可以使用正则表达式和XPath过滤自己需要的数据了

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support import expected_conditions as EC# selenium 4的写法
#加入一些常用元素,模拟真人环境
options = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36")
options.add_argument("--window-size=1920,1080")  # 设置窗口大小
options.add_argument("--disable-blink-features=AutomationControlled")  # 禁用自动化控制特征
options.add_argument("--disable-infobars")  # 禁用提示条
options.add_argument("--no-sandbox")  # 解决DevToolsActivePort文件不存在的报错
options.add_argument("--disable-dev-shm-usage")  # 禁用共享内存
options.add_argument("--disable-extensions")  # 禁用扩展
options.add_argument("--disable-gpu")  # 禁用GPU加速
options.add_argument("--disable-javascript")  # 禁用JavaScript(根据需求调整)
options.add_argument("--incognito")  # 隐身模式#初始化浏览器驱动
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager(driver_version="谷歌浏览器版本").install()),options=options)
driver.get("淘宝的商品详情页面")#等待商品页面一键登录的按钮元素的出现就往下执行
loginHTML = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH,'//span[@class="xM6AVLCbLn--loginBtn--_3aec1d3"]')))
#点击一键登录
actions = ActionChains(driver).click(loginHTML).perform()#对登录界面的账号密码点击登录
#准备需要XPath定位的元素
usern = driver.find_element(By.XPATH,'//input[@id="fm-login-id"]')
pwd = driver.find_element(By.XPATH,'//input[@id="fm-login-password"]')
loginHb = driver.find_element(By.XPATH,'//button[@class="fm-button fm-submit password-login  button-low-light"]')#使用准备号的元素对象操作浏览器登录,之间加入pause方法停顿更真实
ActionChains(driver).click(usern).pause(1).send_keys('淘宝账号').pause(0.5).perform()
ActionChains(driver).click(pwd).pause(1).send_keys('淘宝密码').pause(0.5).perform()
ActionChains(driver).click(loginHb).perform()#等待页面是否出现商品详情元素
#因为商品详情元素只有登录状态之后才有的,所以这里的效果等价于确定我浏览商品的时候已经登录完成了,后面对这个页面的源代码进行获取
resFlag = WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH,'//div[@class="xM6AVLCbLn--tabDetailWrap--_3622a08"]')))
#获取页面源代码
print(driver.page_source)
#关闭谷歌浏览器
driver.quit()

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

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

相关文章

JS 网页全自动翻译v3.17发布,全面接入 GiteeAI 大模型翻译及自动部署

两行 js 实现 html 全自动翻译。 无需改动页面、无语言配置文件、无 API Key、对 SEO 友好! 升级说明 translate.service 深度绑定 GiteeAI 作为公有云翻译大模型算力支持translate.service 增加shell一键部署后通过访问自助完成GiteeAI的开通及整个接入流程。增加…

数据结构:数组:插入操作(Insert)与删除操作(Delete)

目录 插入操作(Inserting in an Array) 在纸上模拟你会怎么做? 代码实现 复杂度分析 删除操作(Deleting from an Array) 在纸上模拟一下怎么做? 代码实现 复杂度分析 插入操作(Inserti…

Qt之修改纯色图片的颜色

这里以修改QMenu图标颜色为例,效果如下: MyMenu.h #ifndef MYMENU_H #define MYMENU_H#include <QMenu>class MyMenu : public QMenu { public:explicit MyMenu(QWidget *parent = nullptr);protected:void mouseMoveEvent(QMouseEvent *event) override; };#endif /…

uni-app实现单选,多选也能搜索,勾选,选择,回显

前往插件市场安装插件下拉搜索选择框 - DCloud 插件市场&#xff0c;该插件示例代码有vue2和vue3代码 是支持微信小程序和app的 示例代码&#xff1a; <template><view><!-- 基础用法 --><cuihai-select-search:options"options"v-model&quo…

【机器学习深度学习】 微调的十种形式全解析

目录 一、为什么要微调&#xff1f; 二、微调的 10 种主流方式 ✅ 1. 全参数微调&#xff08;Full Fine-tuning&#xff09; ✅ 2. 冻结部分层微调&#xff08;Partial Fine-tuning&#xff09; ✅ 3. 参数高效微调&#xff08;PEFT&#xff09; &#x1f538; 3.1 LoRA&…

信刻光盘安全隔离与文件单向导入/导出系统

北京英特信网络科技有限公司成立于2005年&#xff0c;是专业的数据光盘摆渡、刻录分发及光盘存储备份领域的科技企业&#xff0c;专注为军队、军工、司法、保密等行业提供数据光盘安全摆渡、跨网交换、档案归档检测等专业解决方案。 公司立足信创产业&#xff0c;产品国产安全可…

Python-标准库-os

1 需求 2 接口 3 示例 4 参考资料 在 Python 中&#xff0c;os&#xff08;Operating System&#xff09;模块是一个非常重要的内置标准库&#xff0c;提供了许多与操作系统进行交互的函数和方法&#xff0c;允许开发者在 Python 程序中执行常见的操作系统任务&#xff0c;像文…

OpenCV CUDA模块设备层-----在 GPU 上执行类似于 std::copy 的操作函数warpCopy()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模块&#xff08;cudev&#xff09; 中的一个设备端内联模板函数&#xff0c;用于在 GPU 上执行类似于 std::copy 的操作&#xff…

Vue Router 中$route.path与 params 的关系

1. params 参数的本质&#xff1a;路径的动态片段在 Vue Router 中&#xff0c;params 参数是通过路由配置的动态路径片段定义的&#xff0c;例如&#xff1a;// 路由配置{ path: /user/:id, component: User }当访问/user/123时&#xff0c;/user/123是完整的路径&#xff0c;…

React 极简响应式滑块验证组件实现,随机滑块位置

&#x1f3af; 滑块验证组件 (Slider Captcha) 一个现代化、响应式的滑块验证组件&#xff0c;专为 React 应用设计&#xff0c;提供流畅的用户体验和强大的安全验证功能。 ✨ 功能特性 &#x1f3ae; 核心功能 智能滑块拖拽 – 支持鼠标和触摸屏操作&#xff0c;响应灵敏随…

STM32第十六天蓝牙模块

一&#xff1a;蓝牙模块HC-05 1&#xff1a;硬件引脚配置&#xff1a; | 标号 | PIN | 说明 | |------|-------|---------------------------------------| | 1 | START | 状态引出引脚&#xff08;未连接/连接输出信号时&#xff09; |…

时序数据库IoTDB用户自定义函数(UDF)使用指南

1. 编写UDF时序数据库IoTDB为用户提供了编写UDF的JAVA API&#xff0c;用户可以自主实现UDTF&#xff08;用户自定义转换函数&#xff09;类&#xff0c;IoTDB将通过类加载机制装载用户编写的类。Maven依赖如果使用Maven&#xff0c;可以从Maven库中搜索以下依赖&#xff0c;并…

Linux国产与国外进度对垒

Linux国产与国外进度对垒 引言国产Linux的发展现状国外Linux的发展现状技术对比国产Linux的挑战与机遇国外Linux的优势与局限结论 引言 简述Linux在全球操作系统市场中的地位国产Linux的发展背景与意义国外主流Linux发行版的现状 国产Linux的发展现状 主要国产Linux发行版介…

Jenkins-Email Extension 插件插件

Editable Email Notification Editable Email Notification 是 Jenkins 的 Email Extension 插件的核心功能&#xff0c;用于自定义邮件通知&#xff0c;包括邮件主题、内容、收件人、发件人等 属性 1.Project From 项目发件人&#xff0c;设置邮件的发件人地址 **注意&…

windows系统下将Docker Desktop安装到除了C盘的其它盘中

windows系统下安装docker会自动安装到C盘&#xff0c;可以采用下面的方法将其安装到其它盘中1、先下载Docker Desktop安装程序Docker Desktop Installer.exe&#xff0c;比如你下载到了C:\Users\YourUsername\Downloads 文件夹中。 2、打开 PowerShell 进入C:\Users\YourUser…

视频工具箱 1.1.1 |小而美的视频处理工具,支持多种常用功能

VideoTools是一款基于FFmpeg的小而美的视频处理工具&#xff0c;专为需要快速高效地进行视频编辑的用户设计。这款工具无需安装&#xff0c;体积仅约200KB&#xff0c;提供了视频压缩、格式转换、转GIF、修改分辨率、加速播放以及音频提取等多种常用功能。其用户界面简洁直观&a…

无人机集群搜索技术全面解析

无人机集群搜索是指通过多架无人机协同工作&#xff0c;实现对目标区域的高效覆盖与快速探测。这项技术通过模拟自然界生物群体的集体行为&#xff0c;利用分布式控制和自主决策算法&#xff0c;使无人机集群能够自组织地完成复杂搜索任务。下面从核心技术、应用场景、算法实现…

【Elasticsearch】深度分页及其替代方案

深度分页及其替代方案 1.深度分页2.为什么不推荐深度分页2.1 性能问题&#xff08;核心原因&#xff09;2.2 资源消耗对比2.3 实际限制 3.深度分页的替代方案3.1 方案一&#xff1a;Search After&#xff08;推荐&#xff09;3.1.1 为什么 Search After 性能更高3.1.2 技术原理…

论文阅读笔记——VGGT: Visual Geometry Grounded Transformer

VGGT 论文 输入是 N 个 RGB 图像 I i ∈ R 3 H W I_i\in\mathbb{R}^{3HW} Ii​∈R3HW 的序列 ( I i ) i 1 N (I_i)^N_{i1} (Ii​)i1N​&#xff0c;观察相同 3D 场景。 VGGT 的 Transformer 是一个映射函数&#xff0c;将此序列映射为一组对应的 3D 标注&#xff0c; f ( …

【嵌入式电机控制#11】PID控制入门:对比例算法应用的深度理解

接下来内容需要数学功底&#xff0c;并且有现成结论的内容不做推导&#xff0c;重在讲解工程实践中的方法论&#xff0c;建议控制类专业或学习过相关理论的人阅读 一、开闭环系统 &#xff08;1&#xff09;开环控制系统&#xff1a;被控对象输出对控制器的输出没有影响 &…