selenium怎么用-不用复杂配置,直接写代码就能启动浏览器
前段时间赶自动化小脚本,临时被逼着摸索selenium怎么用,一开始照着网上杂乱的代码复制粘贴,半天浏览器都打不开,越写越烦躁,总觉得网上教程要么太啰嗦,要么漏掉了新手最关键的前置步骤。
直接pip安装selenium之后,第一行代码运行就报错。报错提示找不到驱动程序,当时傻乎乎去浏览器官网手动下载对应版本的chromedriver,解压之后放在项目文件夹里,还是一直弹窗报错,代码运行一秒就直接闪退,没有任何多余提示。后来盯着报错日志看了三分钟,才反应过来现在新版selenium根本不需要手动配置驱动,之前做的全部都是无用功。
就一行极简启动代码,不用额外下载任何驱动文件,适配本地已经安装好的谷歌浏览器,直接运行就能自动唤起浏览器窗口。
```
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
```
短短三行代码,运行之后浏览器自动弹出,并且直接跳转到百度首页,没有多余弹窗,也没有版本不匹配的报错。
很多人入门卡在这里,就是一直停留在旧版本教程里。旧版selenium必须手动匹配浏览器版本和驱动版本,浏览器更新一次,驱动就要重新下载一次,来回核对版本号特别耗费时间,现在内置了自动驱动管理工具,完全省去这一步,新手没必要再去纠结驱动适配的问题。
写完打开网页的基础代码后,试着加了点击元素的操作,又遇上新的问题。一开始随便用了find_element_by_xpath这个旧方法,代码标黄警告,页面元素偶尔定位失败,有时候明明页面加载完成了,还是提示找不到对应搜索框。
页面加载快慢不一样,元素出现的时间有延迟,直接执行点击指令,程序跑的速度永远快于网页渲染速度。
没有换复杂的显式等待代码,只是加了简单的强制休眠,临时适配当下的脚本需求。time.sleep(3),让程序打开网页之后暂停三秒,等待页面全部元素加载完毕,再去定位搜索框输入内容。修改之后代码一次运行成功,自动在百度搜索框输入关键词,并且完成自动点击搜索。
没必要一上来就啃显式等待、隐式等待这些偏进阶的知识点,新手刚上手,能用最简单的休眠解决页面加载时差问题就足够。
身边一起写脚本的同事,上手selenium的时候习惯一次性写完整套自动化流程,打开页面、输入内容、切换窗口、关闭浏览器全部堆在同一个代码块里。一旦中间某一步定位失败,整条代码直接卡死,调试的时候根本找不到具体出错的行数。
我一直习惯拆分代码,每完成一步浏览器操作,就空一行隔开,每写完一个功能,就单独运行一次片段。打开网页单独运行一次,定位输入框单独运行一次,点击搜索再单独运行一次。拆分之后,出错能立刻锁定是哪一步元素定位出了问题,排查问题的速度快很多,不用从头到尾通读全部代码找bug。
不要一开始就追求精简代码,行数少不代表脚本好用,可读性对于新手调试来说远比简洁重要。
试过直接后台静默运行浏览器,关掉可视化窗口做无痕自动化。添加无头参数之后,脚本确实可以后台悄悄运行,不会弹出浏览器窗口,但是遇到页面验证码、弹窗人机校验的时候,无头模式没有办法手动干预,脚本会直接卡死,无法继续往下执行。
日常新手练习、简单网页自动化,保留可视化浏览器窗口永远更稳妥,遇到页面异常可以肉眼直观看到现场情况,方便及时修改代码。
最后一行操作,手动写入关闭浏览器的代码,平稳释放全部进程,避免后台残留大量浏览器占用电脑运行内存。
driver.quit()