
本文先完整讲解PyCharm下Python Selenium全套配置、基础/高阶API用法搭配可运行实操案例再演示同款需求用Selenium IDE录制实现最后汇总两种方案使用思路。前言做Web UI自动化、模拟网页操作、简单爬虫时Selenium是行业最主流工具。它有两种使用模式大家日常都可以按需选用Python手写Selenium脚本代码可控支持复杂业务逻辑可分层封装、对接测试流程适合长期自动化项目Selenium IDE浏览器插件零代码可视化录制点点鼠标就能生成操作流程快速复现页面操作新手入门友好。一、环境搭建PyCharm适配1. selenium库安装打开PyCharm底部Terminal终端执行pip命令安装核心依赖# 核心自动化库 自动驱动管理工具pipinstallselenium webdriver-managerselenium提供浏览器操控全套APIwebdriver-manager自动识别本地Chrome版本一键下载匹配驱动告别版本不兼容报错。2. 浏览器驱动两种安装方案方案1自动驱动推荐新手本文全部示例使用无需手动下载驱动文件代码内部自动拉取对应版本即装即用。方案2手动下载驱动旧项目兼容场景针对不同的浏览器需要安装不同的驱动。Chrome用ChromeDriverEdge用MSEdgeDriverFirefox用GeckoDriver各驱动均可在对应官网获取。这里用 ChromeDriver 安装作为演示查看本地Chrome版本浏览器右上角设置 → 关于Chrome记录版本号访问 ChromeDriver官方下载地址 找到对应版本压缩包解压驱动.exe文件放置Python根目录或代码内指定驱动文件路径并把当前路径保存到环境变量即可全局调用驱动。二、Selenium 基础核心用法1. 浏览器页面基础操作1.1 初始化浏览器对象自动驱动极简写法fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServicefromwebdriver_manager.chromeimportChromeDriverManager# 自动匹配Chrome驱动初始化浏览器driverwebdriver.Chrome(serviceService(ChromeDriverManager().install()))注意如果运行时报错TypeError: __init__() got an unexpected keyword argument service说明你安装的是老版本Selenium3.x需要升级pip install -U selenium拓展无头模式后台运行不弹出浏览器窗口适合批量跑任务fromselenium.webdriver.chrome.optionsimportOptions optOptions()opt.add_argument(--headlessnew)# Chrome 109 使用新无头模式driverwebdriver.Chrome(serviceService(ChromeDriverManager().install()),optionsopt)1.2 访问网页地址driver.get(https://www.baidu.com)1.3 控制浏览器窗口尺寸# 窗口最大化driver.maximize_window()# 自定义宽高driver.set_window_size(1000,800)1.4 页面前进、后退、刷新driver.back()# 后退上一页driver.forward()# 前进下一页driver.refresh()# 刷新当前页面1.5 获取页面基础属性print(页面标题,driver.title)print(当前URL,driver.current_url)print(页面源码,driver.page_source)# 可用于调试或简单爬虫2. 页面元素定位四大主流定位方式统一导入定位枚举类fromselenium.webdriver.common.byimportBy定位方式代码示例适用场景ID定位driver.find_element(By.ID, kw)页面唯一id属性稳定性最高Class定位driver.find_element(By.CLASS_NAME, s_ipt)单一class值CSS选择器driver.find_element(By.CSS_SELECTOR, #kw)灵活适配复杂样式语法简洁XPath定位driver.find_element(By.XPATH, //input[idkw])无id/class的复杂页面万能但效率稍低CSS选择器常用语法速查目标CSS写法说明id为kw的元素#kw#表示idclass为s_ipt的元素.s_ipt.表示classinput标签input直接写标签名子级元素form inputform下的直接子级input后代元素form inputform下所有层级input属性筛选input[namewd]匹配name属性为wd的input单数与复数定位# 定位单个元素找不到抛异常driver.find_element(By.ID,kw)# 定位多个元素找不到返回空列表不抛异常driver.find_elements(By.CLASS_NAME,result-item)3. 模拟鼠标操作需要导入鼠标动作链fromselenium.webdriverimportActionChains actionActionChains(driver)elemdriver.find_element(By.ID,su)action.click(elem).perform()# 单击action.double_click(elem).perform()# 双击action.context_click(elem).perform()# 右键action.move_to_element(elem).perform()# 鼠标悬浮4. 模拟键盘输入操作导入键盘按键包fromselenium.webdriver.common.keysimportKeys search_inputdriver.find_element(By.ID,kw)search_input.send_keys(Selenium教程)# 输入文字search_input.send_keys(Keys.ENTER)# 回车search_input.send_keys(Keys.CONTROL,a)# CtrlA全选search_input.send_keys(Keys.BACKSPACE)# 删除5. 三种延时等待解决元素加载未完成报错5.1 强制等待不推荐仅调试用固定休眠时间不管页面是否加载完成浪费执行时间importtime time.sleep(3)5.2 隐式等待全局通用设置全局等待时长查找所有元素时最多等待指定秒数找到立刻执行driver.implicitly_wait(10)5.3 显式等待企业项目首选精准高效单独等待某一个指定元素精准控制加载时机速度更快fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC# 最多等待10秒直到搜索框出现input_elemWebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,kw)))6. 页面切换操作6.1 多窗口切换打开新标签页后通过窗口句柄切换页面# 获取所有窗口句柄windowsdriver.window_handles# 切换到第二个新窗口driver.switch_to.window(windows[1])# 切回第一个窗口driver.switch_to.window(windows[0])6.2 iframe表单切换页面内嵌iframe时必须切入框架才能定位内部元素# 根据id/name切入iframedriver.switch_to.frame(iframeId)# 通过元素对象切入frame_elemdriver.find_element(By.CSS_SELECTOR,iframe)driver.switch_to.frame(frame_elem)# 切回原页面driver.switch_to.default_content()7. Cookie操作# 获取全部cookiecookiesdriver.get_cookies()# 添加自定义cookiedriver.add_cookie({name:test,value:123})# 删除单条cookiedriver.delete_cookie(test)# 清空所有cookiedriver.delete_all_cookies()三、Selenium 高阶实用技巧1. execute_script 执行JS脚本1.1 判断页面元素是否存在defelement_exist(driver,xpath):returndriver.execute_script(return document.evaluate({}, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue ! null.format(xpath))1.2 滚动页面到最底部driver.execute_script(window.scrollTo(0, document.body.scrollHeight);)1.3 滚动至指定元素位置targetdriver.find_element(By.ID,su)driver.execute_script(arguments[0].scrollIntoView();,target)1.4 获取页面滚动高度判断是否到底scroll_heightdriver.execute_script(return document.body.scrollHeight)current_scrolldriver.execute_script(return window.pageYOffset)2. XPath高级定位方案2.1 文本精准定位driver.find_element(By.XPATH,//a[text()百度首页])2.2 模糊文本匹配# 包含指定文字driver.find_element(By.XPATH,//div[contains(text(), 搜索)])# 属性值包含指定内容driver.find_element(By.XPATH,//input[contains(class, ipt)])2.3 多条件逻辑定位# idkw 且 classs_iptdriver.find_element(By.XPATH,//input[idkw and classs_ipt])# 多个条件用ordriver.find_element(By.XPATH,//input[idkw or namewd])2.4 轴定位父子/兄弟节点# 父节点下的第一个子input注意child::是默认轴可省略driver.find_element(By.XPATH,//form/child::input[1])# 简写形式等价driver.find_element(By.XPATH,//form/input[1])# 获取当前节点的父节点driver.find_element(By.XPATH,//input[idkw]/parent::form)# 获取前一个兄弟节点driver.find_element(By.XPATH,//input[idkw]/preceding-sibling::div)# 获取后一个兄弟节点driver.find_element(By.XPATH,//input[idkw]/following-sibling::span)四、完整综合实操案例百度搜索自动化完整可运行代码fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.chrome.optionsimportOptionsfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.common.keysimportKeysfromwebdriver_manager.chromeimportChromeDriverManagerimporttimeimporttraceback optionsOptions()options.add_argument(--disable-gpu)options.add_argument(--no-sandbox)options.add_argument(--disable-dev-shm-usage)options.add_argument(--window-size1920,1080)options.add_argument(--disable-blink-featuresAutomationControlled)options.add_experimental_option(excludeSwitches,[enable-automation])options.add_experimental_option(useAutomationExtension,False)serviceService(ChromeDriverManager().install())driverwebdriver.Chrome(serviceservice,optionsoptions)driver.implicitly_wait(8)driver.maximize_window()driver.execute_script(Object.defineProperty(navigator, webdriver, {get: () undefined}))try:driver.get(https://www.baidu.com)print(当前页面标题,driver.title)time.sleep(3)# 在AI搜索框中输入内容使用对应的textareaai_search_inputdriver.find_element(By.ID,chat-textarea)ai_search_input.clear()ai_search_input.send_keys(Python Selenium自动化教程)print(已向AI搜索框输入关键词)time.sleep(0.5)# 点击AI搜索框旁的“百度一下”按钮ai_search_btndriver.find_element(By.ID,chat-submit-button)ai_search_btn.click()print(已点击AI搜索按钮)# 等待搜索结果加载time.sleep(3)driver.execute_script(window.scrollTo(0, document.body.scrollHeight);)print(已滚动至页面底部)# 添加暂停让你查看搜索结果 print(\n*50)print(搜索结果已加载完成浏览器保持打开状态。)print(请查看搜索结果完成后按 Enter 键关闭浏览器...)print(*50)input()# 等待用户按回车键exceptExceptionaserr:print(脚本执行异常,err)traceback.print_exc()finally:# 关闭浏览器释放进程driver.quit()print(浏览器已关闭。)运行效果自动弹出Chrome浏览器并打开百度首页在AI搜索框中输入关键词Python Selenium自动化教程点击百度一下按钮执行搜索等待3秒后自动滚动页面至底部程序暂停浏览器保持打开按Enter 键后自动关闭浏览器无残留进程。五、零代码替代方案Selenium IDE录制同款百度搜索前面我们用Python代码完成了自动化流程不想写代码的小伙伴可以使用Selenium IDE插件快速实现一模一样的操作1. 前置准备Chrome/Edge浏览器应用商店搜索安装官方Selenium IDE插件。2. 录制完整步骤打开插件点击「录制新测试」填写用例名称默认网址填https://www.baidu.com点击红色录制按钮自动打开百度页面手动在搜索框输入Python Selenium自动化教程按下回车页面加载完成后滚动页面到底部完成操作后停止录制3. 回放与导出点击播放按钮自动复现全部操作流程支持导出Python脚本或其他语言导出后可复制到PyCharm中二次修改优化。注意Selenium IDE导出的Python脚本通常包含time.sleep()固定等待且用的是老式find_element_by_*语法。如果要在新版Selenium 4.x中运行需要将定位改为By.xxx格式并建议将强制等待替换为显式等待否则脚本稳定性会打折扣。六、全文总结Python Selenium脚本功能全面支持等待、JS执行、复杂逻辑、批量任务适合长期维护自动化测试、爬虫场景是企业主流方案Selenium IDE工具零代码可视化录制上手成本极低适合临时验证页面、快速复现bug、新手熟悉自动化流程学习建议新手先用IDE看懂自动化执行逻辑再系统学习Python Selenium基础高阶API两种方案结合使用效率最高避坑要点优先使用显式等待 隐式等待兜底少用time.sleep()定位优先用ID和CSSXPath做兜底生产环境务必用try-finally或with确保driver.quit()被执行Selenium 4.x 已废弃find_element_by_*系列方法统一使用find_element(By.xxx, value)参考Selenium 官方WebDriver开发文档ChromeDriver官方版本适配说明