Selenium的第三天打卡——Selenium应用(selenium元素选取以及浏览器操作)

发布于:2025-05-30 ⋅ 阅读:(88) ⋅ 点赞:(0)

 Selenium 4 应用示例解析

目录

Selenium 4 应用示例解析

一、基本配置

二、浏览器设置(这之前没有html基础的朋友可以先去了解一下html哦

三、元素定位方法

1.Selenium 4 元素的选中

①开发者模式

②观察代码

2.Selenium 4 元素抓取的核心内容

主要定位元素类型

3.八大定位方法

      确定唯一性

      八大定位方法

4.元素操作方法

   等待机制

    最佳实践

以下是对淘宝网站的登录以及搜索的自动化实现:

  登录(这里由于小编忘记淘宝密码了,则使用验证码登录)

  搜索功能

  注意事项

  隐式等待设置会影响所有元素定位操作:

  显式等待可以针对特定条件:

  改进建议

  验证码处理需要额外方案:

  页面跳转后建议增加等待:

  元素定位技巧

  开发者工具中使用 Ctrl+F 测试选择器:

  XPath 定位可作为备选方案

Selenium 浏览器操作总结

一、浏览器窗口控制

二、浏览器导航控制

三、浏览器刷新操作

四、多窗口处理示例

五、异常处理示例


以下代码展示了如何使用 Selenium 4 进行淘宝自动化操作,包括登录、搜索商品等常见网页交互功能。

一、基本配置

#webdriver是用于操作浏览器的
from selenium import webdriver
import time
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

driver_path = r"D:\tools\chromedriver.exe"

#创建管理对象
service = Service(executable_path=driver_path)
#创建webdriver
driver = webdriver.Chrome(service=service)

二、浏览器设置

#设置浏览器最大化
driver.maximize_window()
#隐式等待 #打开网页,网页有过打开的较慢,会影响后续操作,为解决该问题,加上隐式等待
driver.implicitly_wait(10)
#打开想要操作的网页
driver.get("https://www.taobao.com")
在这之前没有html基础的朋友可以先去了解一下html哦

三、元素定位方法

1.Selenium 4 元素的选中
①进入网页后,点击f12,进入开发者模式,点击下图中我选中状态的蓝色图标即可使用鼠标选取元素

②鼠标移动到想要选取的元素位置上,右侧代码也会随之定位到相应位置

2.Selenium 4 元素抓取的核心内容
主要定位元素类型
  • 基础HTML元素:包括输入框(input)、按钮(button)、链接(a)、下拉框(select)、复选框(checkbox)、单选框(radio)、文本区域(textarea)、表格(table)、图片(img)。
  • 复合组件:如模态框(modal)、标签页(tab)、轮播图(carousel)、日期选择器(datepicker)、文件上传控件(file upload)。
3.八大定位方法

在定位之前先要确定元素的唯一性,一般情况下元素唯一才能定位成功,我们在开发者模式中可以使用CTRL+F得到一个输入框,按照格式输入我们的元素,即可检验出我们的元素是否唯一

这里的1of1即表示我们当前这个元素是可以使用的

八大定位方法:
from selenium.webdriver.common.by import By

# ID定位
driver.find_element(By.ID, "element_id")

# 类名定位  
driver.find_element(By.CLASS_NAME, "class_name")

# 名称定位
driver.find_element(By.NAME, "name_attribute")

# 标签名定位
driver.find_element(By.TAG_NAME, "tag_name")

# 链接文本定位
driver.find_element(By.LINK_TEXT, "完整链接文本")

# 部分链接文本定位
driver.find_element(By.PARTIAL_LINK_TEXT, "部分链接文本")

# CSS选择器定位
driver.find_element(By.CSS_SELECTOR, "css_selector")

# XPath定位  
driver.find_element(By.XPATH, "xpath_expression")
4.元素操作方法
  • 基础交互click(), send_keys(), clear(), submit()
  • 状态获取text, get_attribute(), is_displayed(), is_enabled(), is_selected()
  • 高级交互
from selenium.webdriver.common.keys import Keys
element.send_keys(Keys.RETURN)

from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(element).click().perform()

driver.execute_script("arguments[0].scrollIntoView();", element)
   等待机制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 显式等待
WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "element_id"))
)

# 隐式等待(慎用)
driver.implicitly_wait(5)
    最佳实践
  • 定位策略:优先使用ID > CSS选择器 > XPath
  • 稳定性增强
# 相对XPath示例
driver.find_element(By.XPATH, "//div[contains(@class,'panel')]//button")

# CSS属性选择器  
driver.find_element(By.CSS_SELECTOR, "input[name^='user']")
  • Page Object模式
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.username_field = (By.ID, "username")
        self.password_field = (By.NAME, "password")
        
    def login(self, username, password):
        self.driver.find_element(*self.username_field).send_keys(username)
        self.driver.find_element(*self.password_field).send_keys(password)
以下是对淘宝网站的登录以及搜索的自动化实现:
  登录(这里由于小编忘记淘宝密码了,则使用验证码登录)
#未登录状态下,所以先点击我的淘宝进行登录
driver.find_element(By.CSS_SELECTOR,'a[href="//i.taobao.com/my_itaobao"]').click()
time.sleep(10)

#点击使用手机验证码方式登录(因为忘记密码了,小编这里用验证码方式)
driver.find_element(By.CSS_SELECTOR,'a[class="sms-login-tab-item"]').click()

#输入11位数字的验证码
driver.find_element(By.CSS_SELECTOR, 'input[name="fm-sms-login-id"]').send_keys("XXXXXXXXXX")

#因为验证码随时变动,这里没有自动填入验证码的操作,而是自动运行到那一阶段,迅速的手动填入验证码

#点击登录
driver.find_element(By.CSS_SELECTOR,'a[class="send-btn-link"]').click()
time.sleep(10)
  搜索功能
# 搜索框输入
driver.find_element(By.CSS_SELECTOR, 'input[id="q"]').send_keys("电饭煲")

# 点击搜索按钮
driver.find_element(By.CSS_SELECTOR, "button.btn-search").click()
  注意事项
  隐式等待设置会影响所有元素定位操作:
driver.implicitly_wait(10)  # 最多等待10秒
  显式等待可以针对特定条件:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "q"))
)
  改进建议
  验证码处理需要额外方案:
# 手动输入验证码
verification_code = input("请输入验证码:")
driver.find_element(By.CSS_SELECTOR, 'input[name="fm-smscode"]').send_keys(verification_code)
  页面跳转后建议增加等待:
time.sleep(5)  # 等待页面加载
  元素定位技巧
  开发者工具中使用 Ctrl+F 测试选择器:
document.querySelectorAll('a[href="//i.taobao.com/my_itaobao"]')
  XPath 定位可作为备选方案:
driver.find_element(By.XPATH, '//a[@class="sms-login-tab-item"]').click()

Selenium 浏览器操作总结

以下是浏览器操作的优化代码示例,涵盖窗口控制、导航控制和刷新操作。
一、浏览器窗口控制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

driver_path = "chromedriver.exe"
# #创建管理对象
service = Service(executable_path=driver_path)
# #创建webdriver
driver = webdriver.Chrome(service=service)

try:
# #最大化窗口
    driver.maximize_window()
#隐式等待
    driver.implicitly_wait(10)
# #打开网页
    driver.get("http://www.baidu.com")
    time.sleep(2)
    
# #设置窗口的宽和高
    driver.set_window_size(480, 800)
    time.sleep(2)
    
    print(f"当前窗口尺寸: {driver.get_window_size()}")
    print(f"窗口位置: {driver.get_window_position()}")
    
finally:
    driver.quit()
二、浏览器导航控制
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time

driver_path = "chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)

try:
    driver.maximize_window()
    driver.implicitly_wait(10)
    
    driver.get("http://www.baidu.com")
    print("当前页面:", driver.title)
    time.sleep(2)
    
    driver.get("http://www.google.com")
    print("当前页面:", driver.title)
    time.sleep(2)
    
#后退
    driver.back()
    print("后退到:", driver.title)
    time.sleep(2)

#前进    
    driver.forward()
    print("前进到:", driver.title)
    time.sleep(2)
    
finally:
    driver.quit()
三、浏览器刷新操作
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
import time

driver_path = "chromedriver.exe"
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service)

try:
    driver.maximize_window()
    driver.implicitly_wait(10)
    
    driver.get("http://www.baidu.com")
    time.sleep(2)
    
 #页面的刷新
    driver.refresh()
    print("第一次刷新完成")
    time.sleep(2)
    
    driver.find_element_by_tag_name('body').send_keys(Keys.F5)
    print("第二次刷新完成")
    time.sleep(2)
    
    driver.execute_script("location.reload();")
    print("第三次刷新完成")
    
finally:
    driver.quit()
四、多窗口处理示例
main_window = driver.current_window_handle
all_windows = driver.window_handles

for window in all_windows:
    if window != main_window:
        driver.switch_to.window(window)
五、异常处理示例
from selenium.common.exceptions import WebDriverException

try:
    driver.refresh()
except WebDriverException as e:
    print(f"刷新失败: {str(e)}")