selenuim自动化基础知识(二)

本文详细介绍了SeleniumWebDriver中常用的元素操作方法,包括发送文本、点击、清除输入、获取属性、检查状态、截图、窗口管理等,并提到了不适合Selenium处理的场景及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 元素的常用方法和属性

1.1.1 send_keys()发送文本

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
browsers.find_element(By.ID, 'kw').send_keys('selenium')
time.sleep(3)

1.1.2 click()鼠标点击

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
browsers.find_element(By.ID, 'kw').send_keys('selenium')
browsers.find_element(By.ID, 'su').click()
time.sleep(3)

1.1.3 clear()清除输入框

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
browsers.find_element(By.ID, 'kw').send_keys('selenium')
browsers.find_element(By.ID, 'kw').clear()
time.sleep(3)

1.1.4 get_attribute()获取元素属性

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
attribute = browsers.find_element(By.XPATH, '//*[@id="form"]/span[1]/span[2]').get_attribute('class')
print(attribute)
time.sleep(3)

1.1.5 text获取元素文本

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
text = browsers.find_element(By.XPATH, '//*[@id="hotsearch-content-wrapper"]/li[1]/a/span[2]').text
print(text)
time.sleep(3)

1.1.6 screen_shot()获取元素截图

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
browsers.save_screenshot('./baidu.png')
time.sleep(3)

1.2 元素的其他方法和属性

1.2.1 is_enabled判断元素是否已启用

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
enabled = browsers.find_element(By.ID, 'su').is_enabled()
print(enabled)

1.2.2 is_selected()判断勾选框是否选中

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('http://www.baidu.com')
browsers.maximize_window()
browsers.find_element(By.ID, 's-top-loginbtn').click()
time.sleep(1)
enabled = browsers.find_element(By.ID, 'TANGRAM__PSP_11__isAgree').is_selected()
print(enabled)

1.2.3 submit()提交表单

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
enabled = browsers.find_element(By.ID, 'TANGRAM__PSP_4__submit').submit()
print(enabled)

1.2.4 rect获取元素的尺寸和坐标

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
rect = browsers.find_element(By.ID, 'TANGRAM__PSP_4__form').rect

1.2.5 size获取元素尺寸

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
size = browsers.find_element(By.ID, 'TANGRAM__PSP_4__form').size

2.1 元素的进阶操作

2.1.1 下拉菜单

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 找到下拉菜单元素
element = browsers.find_element(By.ID, 'Selector')
# 构建下拉菜单类对象
select = Select(element)
# 根据值选择
select.select_by_value('值')
# 根据文本选择
select.select_by_visible_text('文本')
# 根据索引选择
select.select_by_index(1)

2.1.2 文件上传

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 如果上传是input标签可用send_keys
browsers.find_element(By.ID, 'Selector').send_keys(r'附件路径')
# 如果是一个button而不是input,找type="file"的标签元素
browsers.find_element(By.ID, 'Selector').send_keys(r'附件路径')

2.1.3 对话框

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 获取弹框对象
alert = browsers.switch_to.alert
# 确定
alert.accept()
# 取消
alert.dismiss()
# 输入
alert.send_keys('输入内容')
time.sleep(2)

2.1.4 内嵌页面

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 切换至内嵌页面再去进行页面操作
browsers.switch_to.frame("name属性值/id属性值/元素本身")
# 涉及多个内嵌页面可使用
# 切换到上一层
browsers.switch_to.parent_frame()
# 切换至最底层根html
browsers.switch_to.default_content()

2.1.5 窗口切换

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 获取窗口句柄(返回一个列表)
handles = browsers.window_handles
# 获取当前窗口的句柄
handle = browsers.current_window_handle
# 切换至对应窗口
browsers.switch_to.window(handles[handles.index('0')])

2.1.6 翻页

import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 向上下翻页,其他可参考https://www.selenium.dev/selenium/docs/api/py/webdriver/selenium.webdriver.common.keys.html
browsers.find_element(By.XPATH,'/html/body').send_keys(Keys.PAGE_DOWN)
browsers.find_element(By.XPATH,'/html').send_keys(Keys.PAGE_UP)

2.1.7 组合按键

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# ctrl+a
browsers.find_element(By.XPATH, '/html/body').send_keys(Keys.CONTROL, 'a')

2.1.8 执行js代码

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager

browsers = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
browsers.get('https://passport.baidu.com/v2/?reg')
browsers.maximize_window()
# 执行js
browsers.execute_script('window.scrollTo(0, document.body.scrollHeight);')

2.2 不适合selenuim操作的场景

2.2.1 验证码

解决办法:

        1.让开发去掉验证码

        2.让开发加入万能验证码

2.2.2 文件下载

解决办法:

        使用selenium查找链接将其传递给例如libcurl的http请求库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值