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')用于切换到子页面中,详情见: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 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.hqwc.cn/news/512032.html

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

相关文章

视觉slam十四讲学习笔记(七)视觉里程计 2

介绍直接法的原理&#xff0c;并利用 g2o 实现直接法中的一些核心算法。 前言 1. 理解光流法跟踪特征点的原理。 2. 理解直接法是如何估计相机位姿的。 3. 使用 g2o 进行直接法的计算。 哔哩哔哩课程连接&#xff1a;视觉SLAM十四讲ch7_2_哔哩哔哩_bilibili 一、直接法…

小程序分销系统怎么开发_开启您的智能营销新时代

小程序分销系统&#xff1a;开启您的智能营销新时代 随着移动互联网的迅猛发展&#xff0c;微信小程序以其轻便、快捷的特性赢得了广大用户的喜爱。而在激烈的市场竞争中&#xff0c;如何借助小程序这一工具&#xff0c;实现产品的快速传播和销售&#xff0c;成为了众多商家关…

面试问答总结之Java进阶

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;注解Annotaion &#xff08;java标注&#xff09;&#x1f415;内置注解&#x1f415;元注解 &#x1f380;对象克隆&#x1f415;如何实现克隆&#x1f415;如何实现深克…

Vue+SpringBoot打造医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚&#xff0c;后面开发是不需要再新建工程的&#xff0c;一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行&#xff0c;只要前…

研发芯片行业ERP系统的优点

随着信息技术的快速发展&#xff0c;企业资源计划(ERP)系统已成为企业管理的核心工具。在芯片行业&#xff0c;研发活动尤为复杂&#xff0c;涉及资源、流程、技术等多方面的管理。因此&#xff0c;专为芯片行业研发的ERP系统应运而生&#xff0c;为企业带来了诸多优点。 一、资…

深度学习系列61:在CPU上运行大模型

1. 快速版 1.1 llamafile https://github.com/Mozilla-Ocho/llamafile 直接下载就可以用&#xff0c;链接为&#xff1a;https://huggingface.co/jartine/llava-v1.5-7B-GGUF/resolve/main/llava-v1.5-7b-q4.llamafile?downloadtrue 启动&#xff1a;./llava-v1.5-7b-q4.lla…

docker-compose Install Dockge

Dockge Dockge 是一个精美的、易于使用的、反应式的自托管 docker compose.yaml 面向堆栈的管理器。 主要特性: 通过Web页面管理compose.yaml文件。 创建/编辑/启动/停止/重新启动/删除容器。更新Docker镜像。交互式Web终端。响应式设计,实时更新进度(Pull/Up/Down)和Web…

数据结构(一)综述

一、常见的数据结构 数据结构优点缺点数组查找快增删慢链表增删快查找慢哈希表增删、查找都快数据散列&#xff0c;对存储空间有浪费栈顶部元素插入和取出快除顶部元素外&#xff0c;存取其他元素都很慢队列顶部元素取出和尾部元素插入快存取其他元素都很慢二叉树增删、查找都快…

C++学习第七天(string类)

1、学习string的原因&#xff1f; C语言中的字符串 C语言中&#xff0c;字符串是以‘\0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;而且底层空间需要用户自己管…

【会议征稿通知】第二届数字化经济与管理科学国际学术会议(CDEMS 2024)

第二届数字化经济与管理科学国际学术会议&#xff08;CDEMS 2024&#xff09; 2024 2nd International Conference on Digital Economy and Management Science&#xff08;CDEMS 2024&#xff09; 2024年第二届数字经济与管理科学国际会议(CDEMS 2024) 定于2023年4月26-28日…

Processing一些基础程序

一、学会绘制窗口 (1)首先我们需要学会绘制一个窗口&#xff0c;size()函数有两个参数&#xff1a;第一个设定窗口的宽度&#xff0c;第二个设定窗口的高度&#xff0c;如果想要设置一个窗口为宽800像素&#xff0c;高为600像素的窗口&#xff0c;输入以下代码&#xff1a;size…