【Python】selenium工具

news/2024/9/22 20:30:49/

目录

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 timedriver = 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 Bydriver = 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 timeurl = '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.ppmy.cn/news/56337.html

相关文章

转行做PHP程序员都要注意什么?我来聊聊自己的工作经历

最近很多小伙伴问我,从其他部门转到编程工作有没有难度,我是人力资源,辞职自学编程的。在这个行业里,学完编程之后其实也有很多人找不到工作,或者找到的工资很低。但也有些人找到的工作工资很高,而且还有奖…

《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第十三章课后习题参考答案

第十三章 软件工程标准与文档 课后习题参考答案 一、简答题 (1)答:软件工作的范围从原来的只是使用程序设计语言编写程序,扩展到整个软件生存期。如软件概念的形成、需求分析、设计、实现、测试、制造、安装和检验、运行和…

操作系统概述

概述 一、简单描述 1、系统资源的管理者; 2、最接近硬件的一层软件; 3、向上层提供方便容易使用的服务; 二、提供的功能 1、处理机管理; 2、储存器管理; 3、文件管理; 4、设备管理; 举例说明…

【IPv6】基本概念及字段

IPV4知识点: 字段值 IPv4字段共 字段值解释Version版本版本字段,可以区分V4和V6版本,V4是0100,V6是0110,需要注意的是V4和V6头部除了版本字段位置相同外,其他都是不一样的,因此两个协议不能直…

Python面向对象专题一

Python面向对象—专题(一) 1.初识面向对象 Key Point 面向对象概念类的定义对象的创建isinstance函数类本身也是一个对象 面向对象概念 类,描述一类对象的特征集合。对象,符合类定义特征的具体实例。属性,分为类属性…

2023大数据面试题+附答案

文章目录 1.HDFS面试题50道HDFS 答案: 2.HIVE面试题50道HIVE 答案: 3.Spark面试题50道Spark 答案 4.Spark Streaming面试题50道Spark Streaming答案 5.HBase 面试题50道HBase 答案 6.Kafka 面试题50道Kafka答案 7.Flume 面试题50道Flume 答案 8.Flink 面…

多层感知器模型与模型训练

文章目录 1. 多层感知器模型与模型训练1.1 多层感知器模型1.2 损失函数1.3 优化器与初始化模型1.4 编写训练循环1.5 案例代码整合 最近看了日月光华老师的《PyTorch深度学习简明实战》,将里面的代码自己动手复现了一遍,还是受益良多,书里面的…

数据结构初阶 —— 树(堆)

目录 一,堆 堆的概念 向下调整法(数组) 向上调整法(数组) 堆的创建(建堆) 堆的实现 一,堆 堆的概念 如有个关键码的集合K{,,,...&#xf…