【Python】selenium工具

news2024/11/23 20:06:46

目录

1. 安装

2. 测试

3. 无头浏览器

4. 元素定位

5. 页面滑动

6. 按键、填写登录表单

7. 页面切换


Selenium是Web的自动化测试工具,为网站自动化测试而开发,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接收指令,让浏览器自动加载界面,获取需要的数据,页面截屏。

1. 安装

浏览器:谷歌、火狐、Edge,这些浏览器的内核都是google

打开浏览器设置,查看浏览器版本

打开chromedriver下载网页,选择一个和浏览器内核版本最接近的一个版本:CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chromedriver/点击进入,此处以windows环境为示例:

下载安装包,并解压这个文件,得到这个exe文件

如果你是使用PyCharm自带的Python解释器,那么你需要将这个文件放入你的PyCharm文件的bin目录下,例如:C:\...\PyCharm Community Edition 2022.1.3\bin

如果你是通过PyCharm使用Anaconda虚拟环境,那么你需要将这个文件放入你的Anaconda文件的Scripts目录下,例如:C:\...\Anaconda3\Scripts

添加环境变量,如果你已经是使用过PyCharm的用户,那么你的PyCharm大概率是已经添加进入环境变量了,此时你不用再添加环境变量

2. 测试

写一个访问浏览器页面的测试代码,首先下载selenium模块

from selenium import webdriver
import time

# 这两个方法二选一,webdriver.Chrome()会真的打开一个浏览器
# driver = webdriver.PhantomJS()
driver = webdriver.Chrome()

# 访问浏览器网址
driver.get('https://www.douban.com/')

# 截图保存图片
driver.save_screenshot("首页.png")

# 页面停留时间
time.sleep(5)

# 退出当前页面
driver.close()

# 退出浏览器
driver.quit()

运行成功会打开浏览器豆瓣首页网址并停留5秒,拿到首页截图。

3. 无头浏览器

无头浏览器不会打开浏览器页面,但会访问网页,适用于Linux环境

最新的selenium已经放弃了Phantomjs,直接将无头浏览器的逻辑进行了整合

from selenium import webdriver

# 无头
from selenium.webdriver.chrome.options import Options

# 配置参数
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")

# 把参数配置给浏览器
driver = webdriver.Chrome(options=opt)

driver.get("https://www.douban.com/")
driver.save_screenshot("./selenium_test/首页1.png")
driver.close()
driver.quit()

4. 元素定位

from selenium import webdriver
import time
from lxml import etree

# 无头
from selenium.webdriver.chrome.options import Options

# 元素定位
from selenium.webdriver.common.by import By

# 配置参数
opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")

# 把参数配置给浏览器
driver = webdriver.Chrome(options=opt)

driver.get("https://book.douban.com/")

# 截屏当前页面
driver.save_screenshot("./selenium_test/tv.png")

# 获取前端代码
test = driver.page_source
# print(test)

# html = etree.HTML(test)
# xpath_result = html.xpath('//*[@id="content"]/div/div[1]/div[1]/div[2]/div[1]/div/ul[2]/li')
# print(xpath_result)
# print(len(xpath_result))
# for i in xpath_result:
#     print(i.xpath('.//div[@class="info"]//a/@title'))

# 元素定位
xpath_result = driver.find_element(By.XPATH, '//*[@id="content"]/div/div[1]/div[1]/div[2]/div[1]/div/ul[2]/li[1]')
print(xpath_result)
print(xpath_result.text)


time.sleep(3)
driver.close()
driver.quit()

5. 页面滑动

from selenium import webdriver
import time

driver = webdriver.Chrome()

driver.get("https:/www.douban.com/")

time.sleep(2)
js = 'window.scrollTo(0, 10000)'   # 向下滑
# js = 'window.scrollTo(10000, 0)' # 向左滑
# js = 'window.scrollTo(10000, 10000)' # 向左并向下滑
driver.execute_script(js)
time.sleep(2)       # 向上海
js = 'window.scrollTo(0, -10000)'
driver.execute_script(js)

time.sleep(5)

driver.close()
driver.quit()

6. 按键、填写登录表单

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

driver = webdriver.Chrome()

try:
    driver.get('https://book.douban.com/')
    time.sleep(3)

    btn = driver.find_element(By.LINK_TEXT, '登录/注册')
    btn.click()

    # url = driver.current_url
    # driver.get(url)

    driver.find_element(By.XPATH, '//*[@id="account"]/div[2]/div[2]/div/div[1]/ul[1]/li[2]').click()
    time.sleep(2)

    # 填写登录表单
    driver.find_element(By.XPATH, '//*[@id="username"]').send_keys('12345678')
    driver.find_element(By.XPATH, '//*[@id="password"]').send_keys('202125DOUBAN')
    time.sleep(2)

    driver.find_element(By.XPATH, '//*[@id="account"]/div[2]/div[2]/div/div[2]/div[1]/div[4]/a').click()

    time.sleep(10)
    driver.close()
    driver.quit()

except:
    print(Exception)

7. 页面切换

不同的网站有不同的应有场景,有些网站不会新生成页面,有些网站可以自动跳转

from selenium import webdriver
from selenium.webdriver.common.by import By
from lxml import etree
import time

url = 'https://www.bilibili.com/'
driver = webdriver.Chrome()
driver.get(url)

html = driver.page_source
html = etree.HTML(html)

href = html.xpath('//*[@id="i_cecream"]/div[2]/main/div[2]/div/div[1]/div[5]/div/div[2]/a/@href')
print(href)
time.sleep(3)

driver.find_element(By.XPATH, '//*[@id="i_cecream"]/div[2]/main/div[2]/div/div[1]/div[5]/div/div[2]/a').click()

time.sleep(3)
# 获取当前所有窗口
current_windows = driver.window_handles
# 根据窗口索引进行切换
driver.switch_to.window(current_windows[0])     # 从 0 下标开始

time.sleep(3)
driver.close()
time.sleep(3)
driver.quit()

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

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

相关文章

【Linux - Shell常用命令】- 判断文件是否存在、去掉文件后缀

目录 一、判断文件是否存在1.1 判断目录是否存在1.2 判断文件是否存在1.3 其他文件类型判断 二、字符串截取(去掉文件后缀)2.1 获取文件后缀2.2 获取文件前缀 一、判断文件是否存在 1.1 判断目录是否存在 将下面代码保存为dirExist.sh ,运行…

隐私权限是什么

导读: 隐私权在现代社会对于人们而言是重要的人格权,而随着互联网技术的发展,实践中侵犯隐私权的行为很常见。那么隐私权限是什么?侵犯隐私权的行为有哪些?侵犯他人隐私权要负什么法律责任?接下来将由找法…

Linux-修改虚拟机为静态IP 和 主机名

一、设置虚拟机的IP为静态的 一般情况下,NAT网络连接模式下,DHCP动态分配IP地址的,但这样在每次访问连接Linux虚拟机时,都要先去查询ip地址,很麻烦,干脆就将虚拟机IP地址写死,也就是设置为静态…

数据结构初阶 —— 树(二叉树)

目录 一,二叉树 特殊二叉树 二叉树的性质 二叉树的存储结构 二,二叉树链式结构 二叉树的遍历(四种) 二叉树接口 试题 一,二叉树 由一个根节点,加上两颗左二叉树和右二叉树组成,可以为空…

python cms建站教程:Wagtail建站(一、安装与基本使用)

最近有个建站的项目,因为python比较熟,为了快速建站想着用cms,但发现网上关于python cms的教程很少,于是自己试着写一个。建站工具采用Wagtail,是一款基于Django框架的cms,自己照着文档摸索了一番&#xff…

线性调频Z变换 CZT

文章目录 【1. 原理】【2. z k z_k zk​ 所在的路径】【3. CZT的实现步骤】【4. CZT的特点 】【5. CZT的应用】5.1 通过 CZT 变换求 DFT5.2 对信号的频谱进行细化分析5.3 求解Z变换X(z)的零、极点5.4 使用CZT进行Keystone变换 【6.相关文献】 线性调频Z变换(chirp …

FL Studio中文版V21的主要功能与下载教程

FL Studio21最新版是流行的数字音频工作站(DAW)其最新版本FL Studio 21,主要功能和下载教程如下: FL Studio21中文版功能介绍: 1. 全新界面:采用简洁现代的设计风格,工具栏和菜单进行重组,更加直观。提供智能提示与工作流指导,易于学习和操作。 2. 多显示器支持:可以在不同屏…

野火STM32电机系列(六)Cubemx配置ADC规则和注入通道

前文已经配置了GPIO、编码器 本节讲解CubeMXADC规则和注入通道 本文adc注入通道采用定时器触发,因此在上文定时器配置的基础上进行 常规信号(温度等)使用带DMA的常规通道连续采样 注入采样由定时器触发,采集电机三相电流&…

科大版中国版ChatGPT来啦!抢先体验

随着文心一言、通义千问等国内顶尖级ChatGPT大模型相继问世,具有语言理解和生成能力的人工智能正在引领行业创新发展。作为人工智能公司中的佼佼者,科大讯飞也开始加入到这场竞争中来。 4月20日,科大讯飞宣布即将于5月6日正式发布其最新的“…

【QT5:CAN卡通信的上位机-代码练习-收发数据+布局+引用外部库+基础样例(1)】

【QT5:CAN卡通信的上位机-代码练习-收发数据布局引用外部库基础样例1】 1、概述2、实验环境3、自我总结和提升4、事先声明5、效果展示6、代码编写过程(1)操作步骤部分1、新建工程2、加入外部库,并且加入qt工程中3、ui页面布局4、代码练习5、运…

荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

文章目录 前言一、配置 buildroot 及编译二、写 QT 代码三、编译可执行文件四、拷贝到 SD 卡五、上板子测试六、资源自取 前言 有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作…

人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境

人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境 作者介绍一. 查看自己电脑的CUDA版本1.1 方式一1.2 方式二 二. 下载安装CUDA三. 查看环境变量四. 创建虚拟环境4.1 使用指令创建虚拟环境4.2 查看Anc…

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点 一、题目描述解题1、方法1——递归1.1、思路分析1.2、代码实现 2、方法2——迭代2.1、思路分析2.2、代码实现 3、方法3——交替的尾插3.1、思路分析3.2、代码实现 一、题目描述 原题连接: 24. 两两交换链表中的节…

人群计数经典方法Density Map Estimation,密度图估计

(3)Density Map Estimation(主流) 这是crowd counting的主流方法 传统方法不好在哪里?object detection-based method和regression-based method无法从图像中提取更抽象的有助于完成人群计数任务的语义特征 概况&…

asp.net个人信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net个人信息管理系统 是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net个人信息管理系统VS开发s…

第七章 单行函数

MySQL系列文章目录 http://t.csdn.cn/YTPe9 文章目录 MySQL系列文章目录前言一、函数的理解1、 什么是函数2 、不同DBMS函数的差异3 、MySQL的内置函数及分类 二、 数值函数1 、基本函数2、 角度与弧度互换函数3、 三角函数4、 指数与对数5、进制间的转换 三、字符串函数四、日…

音视频八股文(8)-- h264 AnnexB

NALU(Network Abstract Layer Unit) ⾳视频编码在流媒体和⽹络领域占有重要地位;流媒体编解码流程⼤致如下图所示: H264简介 H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c…

Docker快速创建一个单机版的Jenkins实例

目录 一、创建 Jenkins 实例 二、Pipeline 项目 三、总结 谈到 CI/CD,那便少不了这里面的佼佼者 Jenkins,正如 Jenkins 官网说的一样:“Build great things at any scale”,构建伟大,无所不能! 话不多说…

常用传感器-温湿度传感器SHT30

SHT30温湿度传感器 基本信息 工作电压:2.4V-5.5V 通讯协议:IIC 湿度测量范围:0-100 温度测量范围:-40-125 引脚 VIN:电源正极GND:电源负极SCL:数据线SDA:数据线 操作 1.加载库…

digiKam 8.0发布,带来了许多新的功能和改进

导读digiKam 8.0开源、跨平台、免费的专业照片管理软件现在可以下载,这是一个重大更新,带来了许多新的功能和改进。 digiKam 8.0最大的变化是,该软件被移植到最新的Qt 6开源应用框架,以获得更现代和面向未来的体验。然而&#xff…