system:linux 16.04 64位
selenium:3.4
firefox:65
geckodriver:0.23.0
“白云黄鹤bbs”一段时间不登陆,账号就会被注销,但是我总是有事查询的时候才上它,结果下次一登录发现账号就不见了。没办法,只好写个自动登陆的脚本来每天登陆下,顺便还能提升等级。
话不多说,代码贴上:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
import time
options = Options()
options.headless = True
driver=webdriver.Firefox(executable_path = "/home/lc/Documents/src/python/geckodriver",options=options) #启动火狐浏览器
driver=webdriver.Firefox(executable_path = "/home/lc/Documents/src/python/geckodriver",options=options) #启动火狐浏览器
url='https://bbs.whnet.edu.cn/'
driver.get(url) #用浏览器访问url
print ('before login=========')
driver.find_element_by_id("id").clear() #查看源码并填入源码中用户名 的id,比如‘login_email’,该行是用来清除在登录前登录框中的字
driver.find_element_by_id("id").send_keys("you username") #输入用户名
driver.find_element_by_id("pw").send_keys("you password") #输入密码
driver.find_element_by_xpath("//form[@name='wg']/input[@name='login']").click() #查看源码中登录按钮的class名
time.sleep(5)
print ('After login========')
title=driver.title
print (title)
now_url=driver.current_url
print (now_url)
driver.quit()
鉴于鄙人也是第一次使用 selenium 来做这个事情,所以碰到的问题颇多,首先是firefox、selenium和geckodriver的版本对应问题.我的selenium是通过系统包管理直接安装的,所以是最新的版本 3.4 的。通过一下命令可以查看selenium版本:
$ python
>>>import selenium
>>>help(selenium)
3.X的selenium需要配合版本号47以上的firefox使用,我的firefox也是最新的,所以没问题,那么geckodriver我选的是0.23.0,不是最新的,但是没出现问题。
第二个问题是options
我使用的浏览器是无界面的,所以必须有以下代码:
from selenium.webdriver.firefox.options import Options
options = Options()
options.headless = True
driver=webdriver.Firefox(options=options) #启动火狐浏览器
否则会报错。
第三是如果你的geckodriver没有设置环境变量,那么你必须把它的路径添加进去:
driver=webdriver.Firefox(executable_path = "/home/lc/Documents/src/python/geckodriver")
最后一点是使用driver.find_element_by_xpath() 定位网页元素,这点必须要学会。
第一次用,很多bug虽然消除了,但是还是知其然,不知其所以然,后面会继续补充。