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;这个系统是专门研究谷歌搜索引擎优化的规律和算法创造…

【QT】QTableView或QTableWidget 搭配QLineEdit实现数据的搜索显示

在 Qt 中&#xff0c;QTableView 和 QTableWidget 都可以用来实现数据的搜索和显示&#xff0c;但它们的适用场景和实现方式有所不同&#xff1a; QTableView 适用场景&#xff1a;QTableView 适用于更复杂的场景&#xff0c;尤其是当需要处理大量数据或需要高度定制化的表格时…

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

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

拿下边界机器进行内网渗透的方案

拿下机器后&#xff0c;使用代理访问内网 windows环境&#xff1a;reGeorg与proxifier Linux环境&#xff1a;reGeorg与proxychains&#xff0c; 使用nmap等工具进行扫描&#xff0c;发现web服务的主机和其它信息。有时这些边界机器上会记录一些 内网服务器上的一些信息&…

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…

六、MQTT源码简单浏览

1、MQTT程序分层 1.1、MQTT客户端工作流程 (1)连接MQTT服务器。 (2)客户端向服务器发送订阅主题。 (3)客户端等待MQTT的消息。 (4)客户端向服务器发送消息。 2.2、MQTT程序结构 APP层 while循环或一个进程中&#xff1a;等待消息&#xff0c;处理消息&#xff1b; 发送消…

[法规规划|方案实操]数据资产入表,城投将获融资新渠道

2023年8月&#xff0c;财政部发布了《企业数据资源相关会计处理暂行规定》&#xff0c;并从2024年1月1日开始实施&#xff0c;标志着数据资产正式纳入企业的资产负债表。这一举措被视为数据资产从理论走向实践的重大一步。 数据资产入表对城投运营模式的影响 随着全球经济格局…

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 个…

MATLAB算法实战应用案例精讲-【图像处理】三维重建(最终篇)

目录 前言 相机定标和三维重建 针孔相机模型和变形 三维成像 一、机器视觉系统组成

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

随着数字化时代的到来&#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…

tcping实用小工具

Tcping实用小工具命令详解 一、tcping介绍 tcping&#xff1a;tcping命令基于tcp协议监控&#xff0c;可以从较低级别的协议获得简单的&#xff0c;可能不可靠的数据报服务。 原则上&#xff0c;TCP应该能够在从容硬线连接到分组交换或电路交换网络的各种通信系统之上操作。 …

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

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

企业微信私有部署:实现高效沟通与信息安全

随着移动互联网的快速发展&#xff0c;企业微信作为一种高效、便捷的通讯工具&#xff0c;已经成为了众多企业的首选。然而&#xff0c;对于一些对信息安全有特殊要求的大型企业而言&#xff0c;使用公有版企业微信并不能满足其安全需求。因此&#xff0c;企业微信私有部署应运…

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# 定义人体关键点…