用selenium打开网页的最小模板

前言

环境: win10
python 3.10

第三方库
selenium 4.21.0
webdriver_manager 4.0.1
loguru 0.7.2

经常用selenium来实现一个打开网页的这样一个小功能,虽然代码很少,但每次从0开始写就很烦。所以这里记录下一个模板

小模板

以百度搜索为例

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from loguru import logger

# 使用selenium打开网页的最小代码结构模板
# selenium 版本4.21.0

# 设置chrome选项
chrome_options = Options()
chrome_options.add_argument("--start-maximized")    #最大化窗口

# 使用webdriver_manager自动下载合适版本的webdriver驱动
service = Service(ChromeDriverManager().install())

"""
#不自动下载,手动设置webdriver路径,以chromediver为例
chromedriver_path = r"D:\xxx\chromedriver.exe"  # 这里替换为你下载的webdriver的路径
service = Service(chromedriver_path)
"""
try:
    #第一层的try语句主要是防止webdiver打开浏览器出错,如驱动不匹配或未找到出现的异常
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    
    try:
    #第二层的try语句作用是,在成功打开浏览器后,若出现其它异常,能确保关闭浏览器
        # 打开目标网站 这里以百度首页为例
        driver.get('https://www.baidu.com/')

        # 以下是一些selenium的使用示例
        try:
            #设置显示等待来等待指定元素,最长等待时间7s
            #未在规定时间内满足指定的等待条件,则抛出异常TimeoutException
            wait = WebDriverWait(driver, 7)
            # 通过id的定位方式等待百度输入框的出现
            wait.until(EC.presence_of_element_located((By.ID, "kw")))
            # 通过id的定位方式等待百度一下按钮的出现
            wait.until(EC.presence_of_element_located((By.ID, "su")))

        except TimeoutException as e:
            logger.info(f'未在规定时间内满足指定的等待条件: {e}')
            raise
        except Exception as e:
            logger.info(f'等待中出现其它异常: {e}')
            raise
        
        # 百度首页输入框
        input = driver.find_element(By.ID, 'kw')
        # 输入框输入文本数据
        input.send_keys("1")

        #百度首页 百度一下 按钮
        baidu_buton = driver.find_element(By.ID, "su")
        # 点击按钮
        baidu_buton.click()

        # 强制等待多少时间
        time.sleep(2)
    
    except Exception as e:
        logger.info(f"发生异常 稍后关闭浏览器: {e}")
        raise
    finally:
	#关闭浏览器
        driver.quit()
    
except Exception as e:
    logger.info(f"webdiver打开浏览器前发生异常: {e}")
    raise

关于显示等待和隐式等待

	# 显示等待的例子,用其来等待元素加载,针对于特定的元素起作用
	#如果未在规定的最长等待时间内满足指定的等待条件,则会抛出异常TimeoutException
        ## 最长等待时间10s
        wait = WebDriverWait(driver, 10)
        ## 等待条件-等待元素出现在DOM中
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'xxxx')))
        ## 等待条件-等待元素可点击
        wait.until(EC.element_to_be_clickable((By.ID, "xxxx")))
        ## 等待条件-等待元素中的文本出现
        wait.until(EC.text_to_be_present_in_element((By.ID, "xxxx"), "expected_text"))


        # 隐式等待的例子
        ##设置隐式等待时间为10秒,它在整个webdriver实例生命周期内起作用(也就是webdriver成功打开浏览器后到 浏览器关闭期间)
        ##期间在查找每一个元素时都自动受到该等待设置的影响
        driver.implicitly_wait(10)

        """
        在实际项目中,你可以综合使用隐式等待和显示等待。隐式等待可以作为全局默认的等待机制
        而显示等待可以用于处理特定的复杂场景
        """
		
	#强制等待多少时间
        time.sleep(2)
                  
  
posted @ 2024-08-01 14:21  工作手记  阅读(16)  评论(0编辑  收藏  举报