7.1.2 Selenium的用法1

目录

1. 初始化浏览器对象和访问页面

2. 查找节点及节点交互

2.1 查找单个节点

(1)获取方法1——特定方法

(2)通用方法

2.2 查找多个节点

2.3 节点交互

3. 动作链

4. 执行 JavaScript 之下拉进度条

5. 获取节点信息

5.1 获取属性

5.2 获取文本值

5.3 获取 ID、位置、标签名、大小


1. 初始化浏览器对象和访问页面

from selenium import webdriver

browser = webdriver.Chrome()    # 初始化浏览器对象
browser.get('https://www.taobao.com/')  # 访问淘宝页面
print(browser.page_source)  # 得到页面源代码
browser.close()

        运行代码,之后会自动弹出窗口,并访问淘宝,输出网页HTML代码。

2. 查找节点及节点交互

        Selenium可以驱动浏览器完成各种操作,例如填充表单、模拟点击、输入等。但想要点击、输入等需要找到输入的地方即节点,之后点击、输入即节点交互。

2.1 查找单个节点

        下面我们以淘宝网为例:

        这是个输入的表单节点,之后我们获取它。可以发现这个input节点 id属性为 'q',name='q'等等,我们可以通过其属性去获取节点(属性多种,获取方式也多种)。

(1)获取方法1——特定方法

        以下是所有特定方法:

browser.find_element_by_id('')
browser.find_element_by_name('')
browser.find_element_by_css_selector('')    # CSS选择器
browser.find_element_by_xpath('')
browser.find_element_by_link_text('')
browser.find_element_by_partial_link_text('')
browser.find_element_by_tag_name('')
browser.find_element_by_class_name('')

(2)通用方法

        find_element(查找方法,方式的取值),使用这个最好先from selenium.webdriver.common.by import By,方便使用。

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()    # 初始化浏览器对象
browser.get('https://www.taobao.com/')  # 访问淘宝页面
inputElement1 = browser.find_element_by_id('q')
# inputElement11 = browser.find_element(By.ID, 'q')    # 通用方法
inputElement2 = browser.find_element_by_css_selector('#q')
inputElement3 = browser.find_element_by_xpath('//*[@id="q"]')
print(inputElement1, inputElement2, inputElement3)    # 三个值相同

browser.close()

2.2 查找多个节点

        例如下面的导航条:

获取方法:在前面单个节点的两个获取方法的element加s即可,返回的是个列表。

from selenium import webdriver

browser = webdriver.Chrome()    # 初始化浏览器对象
browser.get('https://www.taobao.com/')  # 访问淘宝页面
inputElement = browser.find_elements_by_css_selector('.nav-hd li')
print(inputElement)

browser.close()

2.3 节点交互

        现要浏览器自动去淘宝搜索ipad,我们需要先驱动浏览器打开淘宝,获取输入框节点,再使用send_keys方法输入文字,获取搜索按钮节点,用 click 方法点击按钮。

from selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()    # 初始化浏览器对象
browser.get('https://www.taobao.com/')  # 访问淘宝页面
inputElement = browser.find_element_by_id('q')    # 获取输入框节点
inputElement.send_keys('ipad')    # 输入文字
findButton = browser.find_element_by_css_selector('.search-button button')    
# 获取搜索按钮节点
findButton.click()    # 点击按钮

        运行程序,可以看到过程。因为没有登陆,所以会停留在登陆页面。更多操作可看官方文档介绍:7. WebDriver API — Selenium Python Bindings 2 documentation。

3. 动作链

        在前面,交互操作都是针对某个节点执行的。还有一些操作妹纸特定的执行对象,比如鼠标拖拽、键盘按键等,需要用另一种方式执行,那就是动作链。

       例如,可以这样实现拖拽节点的操作,将某个节点从一处拖拽至另一处:

实例链接:菜鸟教程在线编辑器

 

现用代码实现拖拽:

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()
url = 'http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()

       browser.switch_to.frame('iframeResult')用于切换到子页面中,详情见:7.1.3 Selenium的用法2-CSDN博客

        依次选中要拖曳的节点source和拖曳到的目标节点target,接着声明 ActionChains 对象并将其赋值为 actions 变量,然后通过调用 actions 变量的 drag_and_drop() 方法,再调用 perform() 方法执行动作,此时就完成了拖曳操作。

结果:

更多的动作链操作可以参考官方文档的动作链介绍:7. WebDriver API — Selenium Python Bindings 2 documentation

4. 执行 JavaScript 之下拉进度条

        对于某些操作,Selenium API 并没有提供。比如,下拉进度条,它可以直接模拟运行 JavaScript,此时使用 execute_script() 方法即可实现(双引号中为固定代码,多个网站都适用),代码如下:

from selenium import webdriver

browser = webdriver.Chrome()
# browser.get('https://www.zhihu.com/explore')
browser.get('https://news.baidu.com/')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')

        有了这个方法,基本上 API 没有提供的所有功能都可以用执行 JavaScript 的方式来实现了。

5. 获取节点信息

        前面说过,通过 page_source 属性可以获取网页的源代码,接着就可以使用解析库(如正则表达式、Beautiful Soup、pyquery 等)来提取信息了。

        不过,既然 Selenium 已经提供了选择节点的方法,返回的是 WebElement 类型,那么它也有相关的方法和属性来直接提取节点信息,如属性、文本等。这样的话,我们就可以不用通过解析源代码来提取信息了,非常方便。

接下来,就看看通过怎样的方式来获取节点信息吧。

5.1 获取属性

        可以使用 get_attribute() 方法来获取节点的属性,但是其前提是先选中这个节点,示例如下:获得百度这个logo的class属性。

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
baiduLogo = browser.find_element_by_id('lg')
print(baiduLogo)
print(baiduLogo.get_attribute('class'))
输出:<selenium.webdriver.remote.webelement.WebElement(session="ae1b17e9e092f2155263522772036f37", element="f.25E08F3EDDDDC250A5E5784201893A30.d.2BB430665B7C306121BC019488525624.e.10")>
s-p-top

5.2 获取文本值

        每个 WebElement 节点都有 text 属性,直接调用这个属性就可以得到节点内部的文本信息。

from selenium import webdriver

browser = webdriver.Chrome()
url = 'https://www.baidu.com/'
browser.get(url)
content = browser.find_element_by_class_name('title-content-title')
print(content.text)
browser.close()

# 输出:
# 大力推动我国新能源高质量发展

5.3 获取 ID、位置、标签名、大小

        上述同样的方法,找到获取节点,用属性即可。

节点.id
节点.location
节点.tag_name
节点.size

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu篇——crontab修改编辑器

输入命令: crontab -e 如果你的系统是第一次使用crontab服务&#xff0c;会首先让你选择一个编辑器 如果已经选择过编辑器&#xff0c;后续想要修改默认编辑器&#xff0c;可以输入sudo select-editor进行修改。

瑞芯微RK3588 C++部署Yolov8检测和分割模型

最近这一个月在研究国产瑞芯微板子上部署yolov8的检测和分割模型&#xff0c;踩了很多坑&#xff0c;记录一下部署的过程和遇到的一些问题&#xff1a; 1 环境搭建 需要的环境和代码主要包括&#xff1a; &#xff08;1&#xff09;rknn-toolkit2-1.5.2&#xff1a;工具链&am…

LibreOffice7.4安装

文件格式转换LibreOffice不失为一个好工具&#xff0c;从转换后的准确率、转换速度、转换格式的支持LibreOffice都是比较给力的。下面&#xff0c;让我们具体学习下如何安装和使用libreOffice。 官网信息&#xff1a; https://zh-cn.libreoffice.org/download/libreoffice/ 安…

【学习心得】响应数据加密的原理与逆向思路

一、什么是响应数据加密&#xff1f; 响应数据加密是常见的反爬手段的一种&#xff0c;它是指服务器返回的不是明文数据&#xff0c;而是加密后的数据。这种密文数据可以被JS解密进而渲染在浏览器中让人们看到。 它的原理和过程图如下&#xff1a; 二、响应数据加密的逆向思路 …

抓包工具获取请求信息

Charles 下载安装 下载 官方下载地址&#xff1a;https://www.charlesproxy.com/latest-release/download.do 下载后傻瓜式安装就好&#xff0c;这个官方的需要激活&#xff0c;可以选择绿色版或者学习版 绿色版 绿色中文版&#xff1a;https://soft.kxdw.com/pc/Charles.z…

05. Nginx入门-Nginx访问控制

测试环境 此处使用的yum安装的Nginx路径。 此处域名均在本地配置hosts。 主配置文件 路径&#xff1a;/etc/nginx/nginx.conf user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connection…

2024最新AI大模型产品汇总

文章目录 1. 写在前面2. 效率工具3. 聊天机器人4. 应用开发工具5. Prompt工具与社区6. 通用基础大模型7. 训练框架8. 开源数据集9. 推理与部署平台及工具 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致…

matlab 提取分割位于多边形区域边缘内部或边缘上的点

[in,on] = inpolygon(xq,yq,xv,yv) xv 和 yv 为定义的多边形区域的,如xv = [1 4 4 1 1 ];yv = [1 1 4 4 1 ];注意最后一个数字与第一个重复,保证多边形闭合; xq 和 yq 为待查询的点in:在多边形内部和边缘的点序号on:仅在多边形边缘的点序号 提取分割方法: matrix=[xq yq…

JXLS导出复杂的Excel表格

前言 官方文档: https://jxls.sourceforge.net/getting-started.html JXLS是一个用于生成Excel文档的Java库。它提供了一种基于模板的方式来生成Excel文档&#xff0c;使得开发者可以在模板中定义样式、公式和数据绑定等内容&#xff0c;然后通过填充数据来生成最终的Excel文…

雍禾植发聚焦医学和美学,雍禾医疗“好医生·一人一案”引领时代

从“秃头大叔”到“秃头少女”&#xff0c;从病理性脱发治疗到美学性毛发诊疗&#xff0c;Z世代下更精细的毛发医疗需求为整个行业带来了重要增量。更多发友意识到毛发的生长和外观对于形象塑造的重要性&#xff0c;并开始寄望通过毛发诊疗来进一步提升个人形象&#xff0c;这一…

【Pytorch 第四讲】图像分类的Tricks

1. 标签平滑 在分类问题中&#xff0c;最后一层一般是全连接层&#xff0c;然后对应标签的one-hot编码&#xff0c;即把对应类别的值编码为1&#xff0c;其他为0。这种编码方式和通过降低交叉熵损失来调整参数的方式结合起来&#xff0c;会有一些问题。这种方式会鼓励模型对不同…

【01】openEuler 源码安装 PostgreSQL

openEuler 源码安装 PostgreSQL 部署环境说明Shell 前端软件包管理器基础概念YUM 简介DNF 简介 源码安装 PostgreSQL环境变量&#xff08;env&#xff09;设置临时环境变量设置永久环境变量设置 初始化数据库&#xff08;initdb&#xff09; 数据库基本操作数据库基本配置&…

Leetcode 26. 删除有序数组中的重复项 java版。 java解决删除重复数组元素并输出长度

1. 官网链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该…

JavaScript实现将输入框内容放大的效果

问题描述&#xff1a;利用DOM所学知识&#xff0c;实现在输入框内输入内容时&#xff0c;在输入框上方显示一个将文字放大的框&#xff0c;在不输入内容时&#xff0c;这个框是被隐藏的。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><he…

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析

传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…

用docker部署后端项目

一、搭建局域网 1.1、介绍前后端项目搭建 需要4台服务器&#xff0c;在同一个局域网中 1.2、操作 # 搭建net-ry局域网&#xff0c;用于部署若依项目 net-ry&#xff1a;名字 docker network create net-ry --subnet172.68.0.0/16 --gateway172.68.0.1#查看 docker network ls…

MySQL--优化(SQL语句执行慢,如何分析)

MySQL–优化&#xff08;SQL语句执行慢&#xff0c;如何分析&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 一、如何分析 聚合查询&#xff1a; 对于涉及大量数据的聚合操作&#xff0c;如果可能的…

边缘计算网关在机床生产中的应用-天拓四方

随着工业4.0的推进&#xff0c;物联网&#xff08;IoT&#xff09;技术在各个工业领域中的应用日益广泛。特别是在机床行业&#xff0c;物联网技术的引入不仅提高了生产效率&#xff0c;还实现了对机床设备的实时监控和远程维护。在这一背景下&#xff0c;边缘计算网关的角色愈…

苹果因在iOS音乐流媒体市场上的反向引导行为,在欧盟被罚款18.4亿欧元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

对接华泰极速行情丨DolphinDB INSIGHT 插件使用教程

INSIGHT 是华泰证券依托大数据存储、实时分析等领域的技术积累&#xff0c;整合接入国内多家交易所高频行情数据&#xff0c;为投资者提供集行情接入、推送、回测、计算及分析等功能于一体的行情数据服务解决方案。基于 INSIGHT 官方提供的行情数据服务 C SDK&#xff08;TCP 版…