Selenium Python 教程

2023-11-18

准备工作

定义:

Selenium是一个用电脑模拟人操作浏览器网页,可以实现自动化,测试等
低层的逻辑就是通过 驱动器去访问

参考链接:

https://zhuanlan.zhihu.com/p/111859925

安装seleniumm:

pip install selenium

下载浏览器驱动

用selenium 登录新版的edge方法
首先,安装pip install msedge-selenium-tools
接下来,使用以下代码:

from selenium import webdriver
from msedge.selenium_tools import Edge, EdgeOptions
options = EdgeOptions()
options.use_chromium = True
options.binary_location = r"C:\xx\Microsoft\EdgeCore\93.0.926.0\msedge.exe" # 浏览器的位置
driver = Edge(options=options, executable_path=r"D:\xx\Desktop\edgedriver_win64\msedgedriver.exe") # 相应的浏览器的驱动位置
​
driver.get("http://www.baidu.com")

元素定位

find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()

控制浏览器操作

  • 控制浏览器窗口大小
    driver.set_window_size(480, 800)
  • 后退
    driver.back()
  • 前进
    driver.forward()
  • 刷新
    driver.refresh()

Webelement常用方法

  • 点击和输入
driver.find_element_by_id("kw").clear() # 清楚文本 driver.find_element_by_id("kw").send_keys("selenium") # 模拟按键输入 driver.find_element_by_id("su").click() # 单机元素
  • 提交
    可以在搜索框模拟回车操作
search_text = driver.find_element_by_id('kw') 
search_text.send_keys('selenium') 
search_text.submit()
  • 其他
size: 返回元素的尺寸。
text: 获取元素的文本。
get_attribute(name): 获得属性值。
is_displayed(): 设置该元素是否用户可见。

鼠标操作

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
ActionChains 类提供了鼠标操作的常用方法:

  • perform(): 执行所有 ActionChains 中存储的行为;
  • context_click(): 右击;
  • double_click(): 双击;
  • drag_and_drop(): 拖动;
  • move_to_element(): 鼠标悬停。

举个例子:

from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")

# 定位到要悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()

键盘事件

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
send_keys(Keys.SPACE) 空格键(Space)
send_keys(Keys.TAB) 制表键(Tab)
send_keys(Keys.ESCAPE) 回退键(Esc)
send_keys(Keys.ENTER) 回车键(Enter)
send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
send_keys(Keys.F12) 键盘 F12

# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
from selenium.webdriver.common.keys import Keys
# 删除多输入的一个 m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)

获取断言信息

title = driver.title # 打印当前页面title
now_url = driver.current_url # 打印当前页面URL
user = driver.find_element_by_class_name('nums').text # # 获取结果数目

等待页面加载完成

  • 显示等待

显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常(TimeoutException)。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

element = WebDriverWait(driver, 5, 0.5).until(
                      EC.presence_of_element_located((By.ID, "kw"))
                      )
element.send_keys('selenium')
driver.quit()

WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:

'''
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()或until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’) 调用该方法提供的驱动程序作为一个参数,直到返回值为False。
在本例中,通过as关键字将expected_conditions 重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。

'''
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

from selenium import webdriver
driver = webdriver.Firefox()    
driver.implicitly_wait(10) # seconds    
driver.get("http://somedomain/url_that_delays_loading")    
myDynamicElement = driver.find_element_by_id("myDynamicElement") 

在不同的窗口和框架之间移动

driver.switch_to_window("windowName")
driver.switch_to_frame("frameName")

以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

#先通过xpth定位到iframe
xf = driver.find_element_by_xpath('//*[@id="x-URS-iframe"]')

#再将定位对象传给switch_to_frame()方法
driver.switch_to_frame(xf)

一旦我们完成了frame中的工作,我们可以这样返回父frame:

driver.switch_to_default_content()

警告框处理

alert = driver.switch_to_alert()
  • text:返回 alert/confirm/prompt 中的文字信息。
  • accept():接受现有警告框。
  • dismiss():解散现有警告框。
  • send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
在这里插入代码片

下拉框选择

from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
sel = driver.find_element_by_xpath("//select[@id='nr']")
Select(sel).select_by_value('50')  # 显示50条

文件上传

# 定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys('D:\\upload_file.txt')  

cookie操作

WebDriver操作cookie的方法:

get_cookies(): 获得所有cookie信息。
get_cookie(name): 返回字典的key为“name”的cookie信息。
add_cookie(cookie_dict) : 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值。
delete_cookie(name,optionsString):删除cookie信息。“name”是要删除的cookie的名称,  
                                   “optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域”。
delete_all_cookies(): 删除所有cookie信息

直接用cookie登录方法

链接:https://www.jianshu.com/p/773c58406bdb

手动获取网页的cookie,将其序列化并存储在本地
写入代码

for item in cookies:
    driver.add_cookie(item)

调用JavaScript代码

通过execute_script()方法执行JavaScripts代码来移动滚动条的位置。

js="window.scrollTo(100,450);"
driver.execute_script(js) # 通过javascript设置浏览器窗口的滚动条位置

窗口截图

# 截取当前窗口,并指定截图图片的保存位置
driver.get_screenshot_as_file("D:\\baidu_img.jpg") 

关闭浏览器

  • close() 关闭单个窗口
  • quit() 关闭所有窗口
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium Python 教程 的相关文章

随机推荐

  • 多边形的面积

    1 三角形面积 xy平面内 有三角形123 如下图所示 图1 借助矢量叉积和点积 这个三角形的面积公式非常简单 这个面积是有符号的 1 2 3逆时针排列 则面积为正 1 2 3顺时针排列 则面积为负 这是对右手系的总结 如果从背面看这个坐标
  • 11月11日 自定义Events,将自定义Events分配给UI,给UI添加动画 UE4斯坦福 学习笔记

    自定义Events 在AttributeComponent的 h头文件上加上代码 自定义Event DECLARE DYNAMIC MULTICAST DELEGATE FourParams FOnHealthChanged AActor
  • 思科模拟器简单校园网设计,期末作业难度

    文章简介 本文用思科模拟器设计和规划了一个校园网络 相当于计算机网络相关专业期末作业难度 作者简介 网络工程师 希望能认识更多的小伙伴一起交流 可私信或QQ号 1686231613 一 网络需求分析 1 学校建有办公室 实验室 教学楼 学生
  • 【STM32】RS485通信使用DMA串口发送数据出现数据丢失、断包问题排查方法

    最近在搞这个Modbus协议 由于485协议是半双工的 区别于RS 232的全双工 考虑不周导致调试modbus协议时候出了不少问题 第一 大多数开发板上的485芯片是MAX485 发送和接收状态的切换是通过IO给到这个两个引脚不同的电平进
  • win 11又更新,新功能简直绝了!

    很早之前 咱就知道微软下半年将会有一次大动作 没错 就是发布Win11 22H2正式版 之前有说过9月份发 现在也确实做到了 微软现在已经面向190多个国家 地区推送了Windows 11 22H2正式版更新 更新之后版本号为22621 5
  • linux中通过sed命令通过正则表达式过滤出中文[^[\u4E00-\u9FA5A-Za-z0-9_]+$]

    linux中通过sed命令通过正则表达式过滤出中文 sed r s u4E00 u9FA5A Za z0 9 lt gt 0 9 a z A Z g zz txt gt a txt
  • flutter listview 滚动到底部_(五) Flutter入门学习 之 Widget滚动

    列表是移动端经常使用的一种视图展示方式 在Flutter中提供了ListView和GridView 为了可能展示出更好的效果 我这里提供了一段Json数据 所以我们可以先学习一下Json解析 一 JSON读取和解析 在开发中 我们经常会使用
  • sql注入原理及解决方案

    sql注入原理就是用户输入动态的构造了意外sql语句 造成了意外结果 是攻击者有机可乘 SQL注入 SQL注入 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命令 比如先前的很多
  • 随机练习题:浅浅固定思路

    1 牛牛的10类人 2 牛牛的四叶玫瑰数 3 牛牛的替换 4 牛牛的素数判断 笔者开头感想 如今大部分高校已经开学 当然笔者也不列外 但是由于疫情的原因 笔者被迫在家上网课学习 一脸忧愁 而这恰恰给了笔者自学的机会 相信笔者会加油滴 按照时
  • Acwing-4366. 上课睡觉

    假设最终答案为每堆石子均为cnt个 cnt一定可以整除sum 石子的总数 我们可以依次枚举答案 sum小于等于10 6 所以cnt的数量等于sum约数的个数 10 6范围内 约数最多的数为720720 它的约数个数有240个 int范围内
  • 单边带(SSB)调制技术

    文章目录 单边带 SSB 调制技术 1 双边带简述 2 单边带调制 单边带 SSB 调制技术 1 双边带简述 首先简述一下双边带调制 所谓双边带 DSB double sideband 调制 本质上就是调幅 时域上将基带信号x t 和高频载
  • pytorch FX模型静态量化

    文章目录 前言 一 pytorch静态量化 手动版 踩坑 二 使用FX量化 1 版本 2 代码如下 总结 前言 以前面文章写到的mobilenet图像分类为例 本文主要记录一下pytorchh训练后静态量化的过程 一 pytorch静态量化
  • 特征工程完全总结(Python源码)

    https www jianshu com p 114385e5a757
  • 【Linux】多线程的互斥与同步

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 目录 一 线程冲突 二 重入与线程安全 1 线程不安全的情况 2
  • svg php,如何加载使用PHP生成的SVG文件?

    我想用 PHP创建一个SVG文件 然后将其包含在HTML文件中 这是我到目前为止 this tutorial之后 svg php header Content type image svg xml gt p gt http www w3 o
  • Session、Token、Cookie的区别及实际使用

    在现代Web开发中 身份验证和会话管理涉及一些基本概念 如Session Token和Cookie 尽管它们都用于管理不同方面的Web会话 但它们之间的差异是很重要的 在本文中 我们将一一介绍Session Token和Cookie的定义
  • 空间直角坐标系右手系和左手系的判定方法及绕轴旋转的正方向

    1 判定坐标系 右手大拇指指向z轴方向 其余四指由x轴握向y轴方向 如果成功 那么判定为右手系 左手大拇指指向z轴方向 其余四指由x轴握向y轴方向 如果成功 那么判定为左手系 坐标系的种类判断成功 那么接下来该判断旋转正方向 2 旋转正方向
  • Linux常用基本操作命令详解(一)

    Linux实用命令 1 前 言 2 常用Linux命令 2 1 常用的系统工作命令 2 2 系统状态检测命令 2 3 工作目录切换命令 3 小结 4 复习巩固题 参考资料 1 前 言 最近学习了有关Linux的一些常用基本命令 在此做个简单
  • python学习笔记 - 如何从几千个文件中寻找出指定的内容

    今天在处理数据时遇到这么个问题 如何从几千个txt文件中找到我想要的内容呢 这是我的实现思路 读取文件 选中指定的内容段 在新路径下保存内容段并命名为之前的文件名 以下是用python实现的代码 有详细注释 usr bin env pyth
  • Selenium Python 教程

    Selenium Python 教程 准备工作 元素定位 控制浏览器操作 Webelement常用方法 鼠标操作 键盘事件 获取断言信息 等待页面加载完成 隐式等待 在不同的窗口和框架之间移动 警告框处理 下拉框选择 文件上传 cookie