【Selenium下】——全栈开发——如桃花来

news2024/11/24 0:16:47

目录索引

  • ==获取元素信息:==
    • 获取单个文本和属性:
      • *获取文本:*
      • *获取属性:*
    • 获取多个文本和属性值:
  • ==等待:==
    • 显示等待:
    • time等待:
  • ==EC:==
    • 常见方法:
  • ==前进后退:==
  • ==选项卡管理:==
    • 打开窗口:
    • 窗口切换:
    • 查看所有窗口id:
    • 实例演示:
  • ==Cookies:==
    • 获取服务器设置在本地的cookies:
    • 设置cookies:
    • 清除cookies:

获取元素信息:

获取单个文本和属性:

获取文本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time

browser = webdriver.Chrome()
url = "https://www.bilibili.com/"
browser.get(url)
find_input = browser.find_element(By.XPATH,'//*[@id="i_cecream"]/div[2]/div[1]/div[3]') #获取哔哩哔哩上面的分类框
print(find_input.text)

呈现效果:在这里插入图片描述

获取属性:

语法:

get_attribute("属性名")
#代码继承上方
print(find_input.get_attribute("class"))

呈现效果:
在这里插入图片描述

获取多个文本和属性值:

browser = webdriver.Chrome()
url = "https://www.bilibili.com/"
browser.get(url)
find_inputs = browser.find_elements(By.XPATH,'//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[1]/a') #获取哔哩哔哩上面的分类框
for i in find_inputs:
    print(i.text)
    print(i.get_attribute("href"))

呈现效果:
在这里插入图片描述

等待:

  • 等待特定元素出现后做某事
  • 通常用于等待某个页面元素加载完毕后进行后续操作,避免出现异常
  • 等待的先后常常会影响你最后能否爬取到正确的数据

显示等待:

明确要等待某个元素出现,等不到就一直等。如果在规定的时间内都没找到,那么报错

browser = webdriver.Chrome()
url = "https://www.bilibili.com/"
browser.get(url)
# wait = WebDriverWait(browser,2)
wait = WebDriverWait(browser,0.001)
result = wait.until(EC.presence_of_element_located((By.XPATH,'//*[@id="i_cecream"]/div[2]/main/div[2]/div/div[1]/div[5]/div/div[2]/a/div/div[1]/picture/img'))) #传入的是一个元组
find_inputs = browser.find_elements(By.XPATH,'//*[@id="i_cecream"]/div[2]/div[1]/div[3]/div[1]/a') #获取哔哩哔哩上面的分类框
print(result)

time等待:

直接使用time模块睡眠即可,简单又方便

EC:

导包:from selenium.webdriver.support import expected_conditions as EC

常见方法:

- title_is 标题是某内容
- title_contains 标题包含某内容
- presence_of_element_located 元素加载出,传入定位元组,如(By.ID, 'p')
- visibility_of_element_located 元素可见,传入定位元组
- visibility_of 可见,传入元素对象
- presence_of_all_elements_located 所有元素加载出
- text_to_be_present_in_element 某个元素文本包含某文字
- text_to_be_present_in_element_value 某个元素值包含某文字
- frame_to_be_available_and_switch_to_it frame加载并切换
- invisibility_of_element_located 元素不可见
- element_to_be_clickable 元素可点击
- staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
- element_to_be_selected 元素可选择,传元素对象
- element_located_to_be_selected 元素可选择,传入定位元组
- element_selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
- element_located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
alert_is_present 是否出现Alert

前进后退:

在这里插入图片描述

控制浏览器前进页面或者后退界面,效果跟这两个箭头差不多

语法:

browser.back() #后退页面
browser.forward() #前进页面
#举个例子:
browser = webdriver.Chrome()
url1 = "https://www.bilibili.com/"
url2 = "https://www.zhihu.com/signin?next=%2F"
url3 = "https://www.baidu.com/s?ie=UTF-8&wd=%E7%99%BE%E5%BA%A6"
browser.get(url1)
browser.get(url2)
browser.get(url3)
browser.back() #后退页面
time.sleep(2)
browser.forward() #前进页面
time.sleep(2)
browser.close()

选项卡管理:

  • 只有切换到当前窗口时,才能操作当前窗口(比如翻页、获取源代码等等)
  • 番外:execute_script()函数常常用来运行js代码,浏览器的交互
  • 除了第一个打开的窗口id为0,其他都是不按顺序打开窗口的。

打开窗口:

语法:

window.open()

窗口切换:

语法:

switch_to_window(窗口id)

查看所有窗口id:

语法:

window_handles

实例演示:

import time
from selenium import webdriver

browser = webdriver.Chrome()

browser.get('https://www.baidu.com')  # 选项卡0  窗口0
time.sleep(1)
browser.execute_script('window.open()')  # 选项卡1  窗口1
time.sleep(1)
browser.execute_script('window.open()')  # 选项卡2   窗口2
time.sleep(1)
browser.execute_script("window.open()") #选项卡3 窗口3
IDS = browser.window_handles # 查看当前浏览器所有窗口ID

browser.switch_to.window(browser.window_handles[1])  # 浏览器对象加载选项卡1 切换到窗口1
browser.get('https://www.taobao.com') # 窗口1 打开淘宝
time.sleep(2)
browser.switch_to.window(browser.window_handles[0])  # 浏览器对象加载选项卡0 切换到窗口0
browser.get('https://www.mi.com/')  # 窗口0 打开小米官网
time.sleep(2)
browser.switch_to.window(browser.window_handles[2])   # 浏览器对象加载选项卡2 切换到窗口2
browser.get('https://jd.com')
time.sleep(2)
#再新开一个选项卡,然后获取新选项卡的源代码
browser.switch_to.window(browser.window_handles[3]) #空白页面
browser.get('https://www.baidu.com')
print(browser.page_source)
print("*"*80)
browser.switch_to.window(browser.window_handles[0])
print(browser.page_source)
  • 通过windows.open()打开的网页一开始都是空白的,注意这个时候我们打开的选项卡尽管是无序的,但是我们通过给指定的选项卡请求对应网址,其实就相当于绑定了他的窗口id,实际上显示的id顺序是混乱的。但是我们设定给选项卡1一个请求网址,给选项卡2一个请求网址,到时候我们对网址的操作只要转换1、2就可以了,不用再管网页的顺序。

Cookies:

获取服务器设置在本地的cookies:

cookies = browser.get_cookies()
print(cookies)

设置cookies:

# 设置 cookies  请求站点时携带的cookie信息
browser.add_cookie({'name': 'zhangsan', 'domain': 'abcd123', 'value': 'hellozhang'})
print(browser.get_cookies())  # 查看设置成功的cookies信息

清除cookies:

# 清除cookies
browser.delete_all_cookies()  # 删除所有cookie
print(browser.get_cookies())

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

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

相关文章

同步管理1000个设备的VLAN数据,这都行?

大家好,我是老杨。 很多网工在工作中,经常会遇到企业网的交换机上需要保持VLAN信息同步的情况。 因为只有这样,才可以以保证所有交换机都能进行正确的数据转发。 小型企业网中,你可以直接登录到每台交换机上进行VLAN的配置和维…

使用Atmel Studio开发Arduino的ATmega328P单片机

摘要:我们知道Arduino开发板常用的芯片是Atmel公司生产的AVR微控制器系列。最常见的是ATmega328P,被广泛用于Arduino Uno开发板。其他常用的AVR芯片包括ATmega2560和ATmega32U4。使用Arduino平台开发AVR的单片机非常方便。Arduino IDE提供了一个非常简洁…

中睿天下成为国家信息安全漏洞库(CNNVD)一级技术支撑单位

近日,中国信息安全测评中心公布2023年度国家信息安全漏洞库技术支撑单位名单,中睿天下荣获中国信息安全测评中心颁发的“国家信息安全漏洞库(CNNVD)技术支撑单位等级(一级)证书”,成为该领域最高…

在tomcat中手动部署应用

以maven做为构建工具的web应用为例,如下图: 在tomcat中运行应用,运行的是应用的字节码文件,所以我先执行package生命周期,新增target文件夹,如下: 打开上面的war文件,跟第一个红框里…

Gradio的web界面演示与交互机器学习模型,全局状态与会话状态《4》

全局状态和会话状态,对于程序员来说都是很熟悉的了,开发中会经常遇到,这里看下在Gradio中是怎么使用的,以及对GPT2的一点介绍 一、Global State全局状态 如果定义的函数想要访问外部的数据,可以将变量写在外面成为一…

赛效: 用佐糖办公工具怎么黑白照片上色

了解更多办公工具的相关应用教程,可到赛效官方网站查看应用软件或应用问答栏目了解更多~ 老旧的照片一般是黑白色,黑白色的照片看起来比较陈旧,这时候可以借助一些在线处理图片的工具来还原照片的颜色,哪些在线办公工具支持给黑白…

动环监控系统这个用途,简直太实用了!

烟草仓库对环境要求高,而人工管理库房无法做到24小时的检查管理,如果突发高温、潮湿等现象,易引发霉变、虫蛀等情况,导致出现损失。 为了提高烟草的存放质量,达到防治霉菌的目的,减少人为监测存在误差而造成…

融云跨平台 SDK 自动生成技术的探索和实践

移步【融云全球互联网通信云】回复“地图”免费领 移步公众号报名报名 WICC 出海嘉年华 作为即时通讯云的领创品牌,融云的通信云产品广泛地服务于社交沟通、直播互动、实时社区、商业沟通等场景。关注【融云全球互联网通信云】了解更多 随着应用场景的丰富和开发…

华为设备内网常用访问控制案例配置

实现 vlan 10不能访问其它vlan但可以上网,用traffic-filter实现 vlan20 不能访问其它vlan但可以上网,用mqc实现 vlan 30不能上外网,但可以和其它网段通信,用mqc实现 交换机配置 : [Huawei]dis current-configuration sysname Hua…

总结JVM重要知识点

一.类加载和创建对象的过程 1.类加载 1.编译 : 将源码文件(.java)编译成JVM可以解释的.class文件 . 语法分析>语义分析>注解处理 , 生成class文件 2.加载 : 装载 : 字节码本来存储在硬盘上 , 需要运行时 , 有类加载系统负责将类的信息加载到内存中(方法区) , 使用的是类…

距离6月18日DAMA-CDGA/CDGP认证考试还有31天,报名从速

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…

crow-han(基于go-micro框架的微服务脚手架)-02-添加一个微服务实战(已k8s为例)

文章目录 1. 目录结构2. 添加自己的微服务2.1 配置文件和必要的函数2.1.1 配置文件2.1.2 连接k8s 2.2 k8s服务相关代码2.3 proto2.3.1 创建proto文件2.3.2 编译proto 2.4 handler2.5 k8s的main函数 3. gateway调用3.1 调用微服务3.2 router 4. 添加文档 swagger5. 调试5.1 启动…

自学黑客(网络安全)有哪些技巧——初学者篇

很多人说,要想学好黑客技术,首先你得真正热爱它。 热爱,听着多么让人激情澎湃,甚至热泪盈眶。 但很可惜,“热爱”这个词对还没入门的小白完全不管用。 如果一个人还没了解过你就说爱你,不是骗财就是骗色…

第三十四章 使用react-redux进一步管理状态

react-redux和redux是两个不同的概念。 redux是一个重要的数据管理库。redux的作用是帮助处理应用程序中复杂的数据管理和状态管理,它可以让你的应用程序更加可维护和可扩展。 react-redux是一个react库,它可以帮助react开发者在react应用程序中集成re…

Java经典笔试题—day11

Java经典笔试题—day11 🔎选择题🔎编程题🥝最近公共祖先🥝最大连续bit数 🔎结尾 🔎选择题 (1)下面哪个标识符是合法的? A.9HelloWorld B._Hello World C.Hello*World D.Hello$World D Java中标…

操作符讲解1---C语言

目录 前言: 1.什么是操作符 2.算术操作符 3.移位操作符 4.位操作符 5.逻辑操作符 5.1逻辑与 5.2逻辑或 5.3练习 5.4逻辑非 前言: 博主这几天都在积累知识,俗话说:”只有多输入才能有输出”。在写博客之前,也…

一文1000字从0到1实现Jenkins+Allure+Pytest的持续集成

一、配置 allure 环境变量 1、下载 allure是一个命令行工具,可以去 github 下载最新版:https://github.com/allure-framework/allure2/releases 2、解压到本地 3、配置环境变量 复制路径如:F:\allure-2.13.7\bin 环境变量、Path、添加 F:\…

【硬核】C语言指针是什么?深入浅出带你掌握C语言指针!

指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问,本文章内容如下 1、C语言指针的作用 2、计算机的存储机制 3、如何定义指针 4、如何操作指针 5、数组与指针的关系 6、指针使用中的一些注意事项 1、C语言指针有什么作用…

企业级架构设计原则(含架构管理原则、业务架构设计原则、应用架构设计原则、数据架构设计原则、技术架构设计原则)

Togaf中的架构原则是一组用于指导企业架构设计和决策的基本准则。这些原则旨在支持组织的目标、价值观和战略,并提供一致性、可持续性和可扩展性的架构方案。 Togaf中提供了一些常见的架构原则,比如:保持一致性:确保架构与组织的目…

MySQL 性能调优及生产实战篇(二)

前言数据结构HASHBinary Search Trees、AVL TreesRed/Black TreesB TreesB Trees 数据存储InnoDBMyISAM 索引优化索引匹配方式哈希索引组合索引聚簇、非聚簇索引覆盖索引 优化细节(important)数据库勿做计算尽量主键查询前缀索引索引扫描排序子查询范围列…