今天跟大家聊聊我搞的这个“selang”,就是个简单的尝试,看看能不能用Python结合Selenium做一个网页自动化的小工具。
一开始的想法:
最初就是觉得,有些网页操作太重复,比如每天都要登录某个网站,点几个按钮,才能看到我想要的信息。 烦死!所以就想着,能不能用程序自动完成这些操作?
准备工作:
- 得装Python,这个不用多说,我是用的Python 3.
- 然后,装Selenium,直接
pip install selenium
就行。 - 最关键的,还得有浏览器驱动。 我用的是Chrome,所以就下ChromeDriver,要注意版本要对应你的Chrome浏览器版本。下好之后,把ChromeDriver放到Python的Scripts目录下。
开始写代码:
第一步,导入selenium:
from selenium import webdriver
第二步,创建浏览器对象:
driver = *()
这一步如果报错,多半是ChromeDriver没放对位置,或者版本不对。
第三步,打开网页:
*("你的目标网址")
把“你的目标网址”换成你要操作的网页。
第四步,定位网页元素:
这步最重要,也最麻烦。要找到你需要点击的按钮,或者要填写的输入框。 Selenium提供很多定位方法,比如:
find_element_by_id()
通过id定位find_element_by_name()
通过name定位find_element_by_xpath()
通过xpath定位find_element_by_css_selector()
通过css selector定位
我是各种方法都试,哪个好用用哪个。 xpath有时候挺方便的,但要注意网页结构变化的话,xpath可能就失效。
第五步,操作网页元素:
定位到元素之后,就可以进行操作,比如:
- 点击元素
*_keys("要输入的内容")
输入内容- 提交表单
举个例子,登录某个网站:
假设网页上有个id是“username”的输入框,用来输入用户名,还有个id是“password”的输入框,用来输入密码, 还有一个id是“login_button”的按钮,用来登录。
代码大概是这样:

username_input = *_element_by_id("username")
password_input = *_element_by_id("password")
login_button = *_element_by_id("login_button")
username_*_keys("你的用户名")
password_*_keys("你的密码")
login_*()

遇到的一些坑:
- 有些网页会动态加载内容,导致你用Selenium定位元素的时候,元素还没出现。 这时候可以用 强制等待几秒,或者用
WebDriverWait
配合expected_conditions
来智能等待。 - 有些网站会反爬虫,比如会检测你的请求头,或者会用验证码。 这时候就要想办法绕过这些限制。 我一般是先修改请求头,伪装成正常用户, 如果有验证码,就只能手动输入(或者用一些图像识别的库,但比较麻烦)。
关闭浏览器:
程序运行完,记得关闭浏览器,不然会一直开着。
用Selenium做网页自动化,还是挺有意思的。 可以省去很多重复性的操作。 也有一些坑要踩,需要耐心调试。 我现在用“selang”自动登录几个常用的网站,每天看看数据,感觉省不少时间。
下一步计划:
想把“selang”做成一个更通用的工具,可以配置化,用户只需要填写一些简单的参数,就可以自动完成网页操作。 还在学习中,希望以后能跟大家分享更多。
还没有评论,来说两句吧...