2023最新版Selenium 4.6.0语法快速入门
简介
Selenium是一款强而有力的前端应用测试工具,也非常适合搭配Python作为网络爬虫的工具;Selenium可以模拟使用者所有浏览器操作的动作,包括输入文本、点击按钮及拖拽进度条等。有鑑于新版的Selenium 4与旧版的语法有若干明显的差异,特别撰写本文来与朋友们釐清并分享。
安装
安装Selenium套件
pip install selenium
安裝WebDriver
可以去这裡下载WebDriver,注意要与你的Chrome浏览器版本相同。下载并解压缩后会得到一个chromedriver.exe的可执行档,建议将这个档案複製到你的Python项目资料夹下,可以避免路径的问题。
浏览网页
1 from selenium import webdriver
2 from selenium.webdriver.chrome.service import Service
3
4 service = Service('./chromedriver') # 设定chromedriver路径
5 driver = webdriver.Chrome(service = service)
6 driver.get('https://www.baidu.com') # 浏览百度网站首页
7 print(driver.title) # 百度一下,你就知道
查找单一元素
"""
<html>
<body>
<form id="loginForm">
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
</form>
</body>
</html>
""" login_form = driver.find_element(By.ID, 'loginForm') # 用ID查找
username = driver.find_element(By.NAME, 'username') # 用NAME查找
username = driver.find_element(By.XPATH, "//input[@name='username']") #用XPATH查找
"""
<html>
<body>
<h2>Welcome!</h2>
<p class="content">Are you a stranger here?</p>
<a href="continue.html">Continue</a>
<a href="cancel.html">Cancel</a>
</body>
</html>
""" continue_link = driver.find_element(By.LINK_TEXT, 'Continue') # 用超链接文本查找
continue_link = driver.find_element(By.PARTIAL_LINK_TEXT, 'Cont') # 用部分超链接文本查找
heading = driver.find_element(By.TAG_NAME, 'h2') # 用标籤名称查找
content = driver.find_element(By.CLASS_NAME, 'content') # 用Class名称查找
content = driver.find_element(By.CSS_SELECTOR, 'p.content') # 用CSS选择器查找
查找多个元素
返回值将会是一个列表(list)。
login_form = driver.find_elements(By.ID, 'loginForm') # 用ID查找
username = driver.find_elements(By.NAME, 'username') # 用NAME查找
username = driver.find_elements(By.XPATH, "//input[@name='username']") #用XPATH查找
continue_link = driver.find_elements(By.LINK_TEXT, 'Continue') # 用超链接查找
continue_link = driver.find_elements(By.PARTIAL_LINK_TEXT, 'Cont') # 用部分超链接查找
heading = driver.find_elements(By.TAG_NAME, 'h2') # 用标籤名称查找
content = driver.find_elements(By.CLASS_NAME, 'content') # 用Class名称查找
content = driver.find_elements(By.CSS_SELECTOR, 'p.content') # 用CSS选择器查找
属性值
attribute_value = element.get_attribute('attribute-name') # 取得"attribute-name"的属性值"attribute_value"
预期条件
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.ID, 'my-element-id'))) # 最多等待10秒让元素变为可见
elements = wait.until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'my-class'))) # 最多等待10秒,让所有元素都可见
等待
显式等待
显式等待用于指示 webdriver 在移动到自动化脚本中的其他步骤之前等待特定条件。
from selenium.webdriver.support import expected_conditions as EC
# expected_conditions模块用于指定要等待的条件 driver.get("https://www.example.com") element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "example-id")))
# WebDriverWait方法用于指定驱动程序和等待的最长时间,本例中一旦找到元素并可点击,脚本就会继续执行。 element.click()
隐式等待
隱式等待是被應用在尝试识别当前不可用的元素時,指示 webdriver 在特定时间内轮询 DOM(文档对象模型)。
driver.implicitly_wait(10) # 设定隐式等待10秒
driver.get("https://www.example.com")
element = driver.find_element_by_id("example-id")
# 在此示例中,为Web驱动程序的整个生命周期设置了10秒的隐式等待。这意味着如果未找到元素,驱动程序将等待最多10秒然后抛出异常。如果在10秒内找到元素,脚本将继续执行。
单选按钮&复选框
radio_button.click() # 选择单选按钮
if not checkbox.is_selected():
checkbox.click() # 选中或取消选中复选框
下拉列表
# 选择下拉列表中的选项
dropdown.select_by_visible_text("Option 1")
# 或者 dropdown.select_by_value("value_1")
# 或者 dropdown.select_by_index(0) """
需要注意的是,如果下拉列表不允许多选,则只能选择一个选项。如果下拉列表允许多选,则可以使用select_by_visible_text、select_by_value或select_by_index方法选择多个选项。如果想取消选中已选择的选项,可以使用deselect_by_visible_text、deselect_by_value或deselect_by_index方法来取消选择。如果想取消选择所有选项,则可以使用deselect_all方法。
"""
Cookies
driver.get("https://www.example.com") cookie = {'name': 'example_cookie', 'value': '1234'}
driver.add_cookie(cookie) # 给浏览器增加一个Cookie example_cookie = driver.get_cookie('example_cookie') # 以Cookie的名称取得Cookie
print(example_cookie) cookies = driver.get_cookies() # 从浏览器取得所有Cookie
print(cookies) driver.delete_cookie('example_cookie') # 以Cookie的名称删除Cookie driver.delete_all_cookies() # 删除所有的Cookie driver.refresh() # 刷新网页
前后浏览
driver.get('https://www.baidu.com')
driver.get('https://world.taobao.com')
driver.back() # 向后浏览
print(driver.title) # 百度一下,你就知道
driver.forward() # 向前浏览
print(driver.title) # Taobao | 淘宝 - 花更少淘到宝
动作链
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys action = ActionChains(driver)
action.move_to_element(element).click().perform() # 移至element并点击
action.context_click(element).perform() # 移至element并以右键点击 action.drag_and_drop(source_element, target_element).perform() # 將source_element拖放到target_element action.click(element).perform() # 点击element
action.double_click(element).perform() # 双击element action.key_down(Keys.CONTROL).send_keys("s").perform() #按下"Ctrl+S" action.send_keys("Hello, world!").perform() # 在當前文字框输入"Hello, world!"
action.send_keys_to_element(element, "Hello, world!").perform() # 在element文字框输入"Hello, world!"
action.send_keys_to_element(element, Keys.ENTER).perform() # 在element文字框输入"ENTER"
表单
driver.get('https://www.baidu.com')
driver.find_element(By.ID, 'kw').send_keys('Python') # 在文字框输入"Python"
driver.find_element(By.ID, 'su').submit() # 提交表单
滚动
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 滚动至页面底部
driver.execute_script("window.scrollBy(0, 500)") # 将页面向下滚动500像素
框架
driver.switch_to.frame("my-frame") # 通過名稱或ID切換到框架"my-frame" element = driver.find_element(By.CSS_SELECTOR, "div.my-element")
print(element.text) driver.switch_to.default_content() # 切换回主框架
JavaScript
driver.execute_script("alert('Hello, world!');") # 执行JavaScript
窗口
driver = webdriver.Chrome() # 创建一个浏览器实例 driver.execute_script("window.open('');") # 打开一个新的窗口 handles = driver.window_handles # 获取所有窗口句柄 driver.switch_to.window(handles[-1]) # 切换到新窗口 driver.get("https://www.google.com") # 在新窗口中搜索内容
search_box = driver.find_element_by_name("q")
search_box.send_keys("Selenium")
search_box.send_keys(Keys.RETURN) driver.close() # 关闭当前窗口 driver.switch_to.window(handles[0]) # 切换回原始窗口
截图
driver.save_screenshot('logo.png')
无头浏览器
from selenium.webdriver.chrome.options import Options options = Options()
options.headless = True driver = webdriver.Chrome(options = options)
关闭
driver.close() # 关闭当前窗口
driver.quit() # 关闭浏览器
2023最新版Selenium 4.6.0语法快速入门的更多相关文章
- Objective-C基础语法快速入门
Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...
- Spring Boot 2.0 的快速入门(图文教程)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...
- .Net Core 3.0 IdentityServer4 快速入门
.Net Core 3.0 IdentityServer4 快速入门 一.简介 IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 将 ...
- .Net Core 3.0 IdentityServer4 快速入门02
.Net Core 3.0 IdentityServer4 快速入门 —— resource owner password credentials(密码模式) 一.前言 OAuth2.0默认有四种授权 ...
- Less 语法快速入门
Less 语法快速入门 Less 是一门 CSS 预处理语言其可以运行在 Node 或浏览器端. 它将传统的 css 样式结构单一的排版顺序进行了优化,让我们可以通过层级嵌套的方式将 css 类名与H ...
- shell语法快速入门(1)
#得到绝对路径 DIR=$(cd `dirname $0`;pwd) $DIR/file.txt #去掉#注释 egrep -v "(#|^$)" /etc/zabbix/zabb ...
- python语法快速入门(1)
http://www.runoob.com/python/python-tutorial.html Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言 ...
- T4语法快速入门
1.什么是T4? T4,即4个T开头的英文字母组合:Text Template Transformation Toolkit.T4(Text Template Transformation Toolk ...
- Ruby 语法快速入门
作用域:指的是类,模块,方法 常量:无需指定类型,全大写 FANS = 100 puts "We have" + FANS.to_s + "fans" 变量 局 ...
- Vue3语法快速入门以及写一个倒计时组件
Vue3写一个倒计时组件 vue3 beta版本发布已有一段时间了,文档也大概看了一下,不过对于学一门技术,最好的方法还是实战,于是找了一个比较简单的组件用vue3来实现,参考的是vant的count ...
随机推荐
- React组件渲染触发的条件-归纳总结
一.React组件何时发生渲染--何时会生成React元素? React组件的渲染发生在两个阶段. 1. 组件挂载. 2. 组件更新. 二.React组件更新的触发条件是什么? 对没有实现should ...
- 前端如何实现将多页数据合并导出到Excel单Sheet页解决方案|内附代码
前端与数据展示 前后端分离是当前比较盛行的开发模式,它使项目的分工更加明确,后端负责处理.存储数据;前端负责显示数据.前端和后端开发人员通过接口进行数据的交换.因此前端最重要的能力是需要将数据呈现给用 ...
- ChatGPT留给知乎、小红书的时间不多了
大家好啊,今天我打算给大家整点好活!挑战一下用ChatGPT打入各平台内部. 知乎挑战! 首先了解一下"知乎体" 知乎体是以专业知识为基础,以清晰的条理对问题进行阐述,并解决该问题 ...
- CentOS7 RPM方式安装JDK
1.下载jdk rpm Java Downloads | Oracle 中国 https://www.oracle.com/cn/java/technologies/downloads/#jdk19- ...
- CF1781D 解题乱弹
abc1057510554 老师说,搞这种数论题,就可以在 CF 上 number theory 板刷一个 1300-1900 就可以了. 然后发现连 1800 的题都做不出来,我可以退役力 QAQ ...
- uWSGI 结合 nginx 配置动静分离
uWSGI 结合 nginx 配置动静分离 目录 uWSGI 结合 nginx 配置动静分离 1 环境准备 2 初始配置文件 2.1 uwsgi 配置文件 2.2 Nginx配置文件 2.3 Djan ...
- js(最新)手机号码 正则验证 - 代码篇
现在手机号码,除了以11+.12+开头的没有,别的好像都有了! 代码如下: 方法一: function checkPhone(){ var phone = $(".phone"). ...
- 基于docker的spark分布式与单线程、多线程wordcount的对比实验
1. 分布式环境搭建 1.1 基于docker的spark配置文件 docker-compose.yml version: '2' services: spark: image: docker.io/ ...
- CSS3,线性渐变(适用标题背景)
.test{ margin:200px auto; height:30px; border:1px #D4D4D4 solid; box-shadow:0 -1px 10px rgba(0,0,0,0 ...
- autodesk2023全家桶 Autodesk 2023 所有产品下载地址
autodesk2023全家桶 Autodesk 2023 所有产品下载地址 作者: 佚名 2022/4/10 11:51:24 Autodesk系列软件每年都会提前发布,目前autodesk2023 ...