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 webdriverbrowser = 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 Bybrowser = 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 webdriverbrowser = 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 Bybrowser = 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 ActionChainsbrowser = 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')用于内嵌,使之后的source能嵌入target,因为要凸显效果,特定加入。

        依次选中要拖曳的节点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 webdriverbrowser = 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 webdriverbrowser = 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 webdriverbrowser = 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

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

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

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

相关文章

谷歌seo推广秒收录怎么做?

谷歌SEO推广秒收录想要做到&#xff0c;可以利用我们光算科技独家技术&#xff0c;GSI快速收录&#xff0c;通过技术手段和操作&#xff0c;帮你的网站快速被谷歌发现和记录 这项技术具体核心就是GPC爬虫池系统&#xff0c;这个系统是专门研究谷歌搜索引擎优化的规律和算法创造…

66-ES6:var,let,const,函数的声明方式,函数参数,剩余函数,延展操作符,严格模式

1.JavaScript语言的执行流程 编译阶段&#xff1a;构建执行函数&#xff1b;执行阶段&#xff1a;代码依次执行 2.代码块&#xff1a;{ } 3.变量声明方式var 有声明提升&#xff0c;允许重复声明&#xff0c;声明函数级作用域 访问&#xff1a;声明后访问都是正常的&…

QT C++实现点击按键弹出窗口并显示图片/视频|多窗口应用程序的设计和开发

一、介绍 首先&#xff0c;QT界面开发中主要大体分为2种多窗口的形式&#xff1a; 嵌入式&#xff1a; 新生成的窗口嵌入在主窗口内部独立窗口&#xff1a; 以弹窗形式的新窗口生成和展示 这里就讲解最简单的&#xff1a;点击案件后&#xff0c;跳出一个新窗口 二、代码实…

利用FFMPEG 将RTSP流的音频G711 转码为AAC 并 推流到RTMP

之前我们的视频转码项目中 是没有加入音频的 现在 需要加入音频 &#xff0c;由于RTMP只支持AAC的 音频流 而有的RTSP流的音频编码并不是AAC 大多数都是G711编码 还分为G711A 和G711U 之前用ffmpeg命令行可以直接 完成转码 并推送到RTMP 但是考虑到无法获取更详细的状…

Qt篇——QTableWidget保存表格数据到Excel文件中,读Excel内容到QTableWidget

表格和excel例子如下图所示&#xff1a; 一、QTableWidget保存表格数据到Excel文件中 代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTi…

Vue3速成

文章目录 day 11. 创建vue3工程3. 响应式数据4. 计算属性 day 25. watch 监视6. watchEffect7. 标签的ref属性8. 回顾TS中的接口_泛型_自定义类型 day 1 1. 创建vue3工程 相关代码如下&#xff1a; ## 创建vue工程 npm create vuelastest## 安装node_modules npm install //…

JSON 文件里的 “$schema” 是干什么用的?

最近我在做一些前端项目&#xff0c;我发现有的配置文件&#xff0c;比如 .prettierrc.json 或者 tsconfig.json 里面都会看到一个 $schema 字段&#xff0c;有点好奇&#xff0c;就查了一下。 什么是 JSON Schema JSON Schema是一种基于JSON (JavaScript Object Notation) 的…

【Leetcode】2369. 检查数组是否存在有效划分

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums &#xff0c;你必须将数组划分为一个或多个 连续 子数组。 如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种 有效 划分&#xff1a; 子数组 恰 由 2 个…

大数据智能化-长视频领域

随着数字化时代的到来&#xff0c;长视频领域的发展迎来了新的机遇和挑战。在这一背景下&#xff0c;大数据智能化技术的应用成为长视频行业提升用户体验、优化运营管理的重要手段之一。本文将从优爱腾3大长视频背景需求出发&#xff0c;分析静态资源CDN、视频文件存储与分发、…

网络安全、信息安全、计算机安全,有何区别?

这三个概念都存在&#xff0c;一般人可能会混为一谈。 究竟它们之间是什么关系&#xff1f;并列&#xff1f;交叉&#xff1f; 可能从广义上来说它们都可以用来表示安全security这样一个笼统的概念。 但如果从狭义上理解&#xff0c;它们应该是有区别的&#xff0c;区别在哪呢&…

力扣hot100题解(python版36-40题)

36、二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 *中序 遍历* 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&am…

【机器学习基础】层次聚类-BIRCH聚类

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

matplotlib.animation 3d姿态动画

目录 演示效果&#xff1a; 演示代码&#xff1a; 保存为gif 演示效果&#xff1a; 演示代码&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.animation import FuncAnimation# 定义人体关键点…

网络防御第6次作业

防病毒网关 按照传播方式分类 病毒 病毒是一种基于硬件和操作系统的程序&#xff0c;具有感染和破坏能力&#xff0c;这与病毒程序的结构有关。病毒攻击的宿主程序是病毒的栖身地&#xff0c;它是病毒传播的目的地&#xff0c;又是下一次感染的出发点。计算机病毒感染的一般过…

动态规划(算法竞赛、蓝桥杯)--分组背包DP

1、B站视频链接&#xff1a;E16 背包DP 分组背包_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N110; int v[N][N],w[N][N],s[N]; // v[i,j]:第i组第j个物品的体积 s[i]:第i组物品的个数 int f[N][N]; // f[i,j]:前i组物品&#xff0c;能放…

基带信号处理设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

基于6U VPX的双TMS320C6678Xilinx FPGA K7 XC7K420T的图像信号处理板 综合图像处理硬件平台包括图像信号处理板2块&#xff0c;视频处理板1块&#xff0c;主控板1块&#xff0c;电源板1块&#xff0c;VPX背板1块。 一、板卡概述 图像信号处理板包括2片TI 多核DSP处理…

Linux进程管理:(二)进程调度原语

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 进程调度的概念比较简单&#xff0c…

QPS 提升 10 倍!滴滴借助 StarRocks 物化视图实现低成本精确去重

作者&#xff1a;滴滴 OLAP 开发工程师 刘雨飞 小编导读&#xff1a; 滴滴于 2022 年引入了 StarRocks。经过一年多的努力&#xff0c;StarRocks 逐渐替代了原有技术栈&#xff0c;成为滴滴内部主要的 OLAP 引擎。截至 2023 年 12 月&#xff0c;滴滴已经成功建立了超过 40 个 …

Cesium插件系列——3dtiles压平

本系列为自己基于cesium写的一套插件具体实现。 这里是根据Cesium提供的CustomShader来实现的。 在CustomShader的vertexShaderText里&#xff0c;需要定义vertexMain函数&#xff0c;例如下&#xff1a; struct VertexInput {Attributes attributes;FeatureIds featureIds;…

LVGL常用部件使用总结之图片部件

图片部件可用于显示图片&#xff0c;图片源可以是 C 语言数组格式的文件、二进制的.bin 文件以及图标字体。值得注意的是&#xff0c;图片部件要显示 BMP、JPEG 等格式的图片&#xff0c;则必须经过解码。 图片部件的组成部分仅有一个&#xff1a;主体&#xff08;LV_PART_MAIN…