工作中会时常遇到重复劳动的事情,比如填写工时。此时你会有几种选择:
1. 手动填写
2. 程序自动填写
想偷懒当然就选了第二种。这里使用selenium1来控制浏览器自动浏览填写来代替手工。当然你也可以直接用get/post请求直接提交数据,但前提你要花很多时间去研究这些api的使用,还有各种参数的生成。
1.使用pip安装selenium
pip install selenium
2.下载并配置selenium的Chrome驱动
https://chromedriver.storage.googleapis.com/index.html?path=2.35/
我这里下载的是chromedriver_win32.zip
解压后将chromedriver.exe拷贝到任意一个环境变量的目录,我的python安装目录已经配到环境变量里面了,所以我只需要将其拷贝到python安装目录。
打开CMD,输入命令chromedriver,看到下面输出说明driver已经正确配置
3.编写代码
这里主要用到xpath2来定位element
from selenium import webdriver
#初始化driver
driver = webdriver.Chrome()
#打开知乎登录页面
driver.get('https://www.zhihu.com/signup')
#默认是注册界面,这里需要先找到切换登录的按钮
signup_switch_bt = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span')
#如果内容显示登录,则证明在注册页面,需要点击一下切换到登录页面
if signup_switch_bt.text == '登录':
signup_switch_bt.click()
#找到填写用户名的输入框
uname_textfield = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input')
#找到填写密码的输入框
pwd_textfield = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input')
#找到登录按钮
signup_bt = driver.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button')
#填写用户名,需要替换为你的用户名
uname_textfield.send_keys('user_name')
#填写密码,需要替换为你的密码
pwd_textfield.send_keys('your_passwd')
#点击登录
signup_bt.click()
本文使用selenium,完成了知乎的自动登录功能。示例代码较为简单,没有加入对网页是否加载完成的判断,没有对异常处理,没有解决验证码检验,仅作为示例所用。
selenium的使用可能会遇到:
1.IE浏览器配置问题:我64位的电脑不能使用64位的IE driver,还有IE浏览器需要设置一些选项
2.网页如果使用了Frame,并且要定位的element再Frame里面,需要用api:driver.switch_to.frame(‘leftFrame’)切换后才能够定位。