本文使用正方教务系统作为例子演示selenium自动化登录的完整流程
使用selenium需要先下载对应版本的浏览器驱动,并配置路径。
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
def selenium_set():
global browser
print('正在唤起火狐浏览器,唤起后请勿关闭,手动最小化即可...')
time.sleep(1)
# 进入浏览器设置
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
# 设置中文
options.add_argument('lang=zh_CN.UTF-8')
# 更换头部
options.add_argument(
'User-Agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"')
options.add_argument('content-type="application/x-www-form-urlencoded"')
# 取消下面一行注释设置无头,也就是不显示浏览器了
# options.add_argument('--headless')
# accept="text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
# 创建浏览器对象
browser = webdriver.Chrome(options=options)
# 规避机器人检测
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
return browser
def selenium_login(yhm='学号',mm='密码',url='url'):
browser.get(url)
time.sleep(1)
# <input type="text" class="form-control" name="yhm" id="yhm" value="" placeholder="用户名" onblur="" autocomplete="off">
# 定位用户名输入框
browser.find_element(by=By.ID, value='yhm').send_keys(yhm)
# <input type="text" class="form-control" name="mm" id="mm" value="" placeholder="密码" autocomplete="off" onfocus="this.type='password'">
# 定位密码输入框
browser.find_element(by=By.ID, value='mm').send_keys(mm)
browser.quit()
# 回车操作
browser.find_element(by=By.ID, value='password').send_keys(Keys.RETURN)
# 点击登录操作,和上面任选一个即可
# browser.find_element(by = By.ID,value='dl').click()
browser = selenium_set()
id='学校编号'
yhm='学号'
mm='密码'
# 哈哈,不建议这样命名,这里这样命名是因为网页的id是这样的
# 课表接口,已把post参数加到url里
# url = 'https://jwglxt.haut.edu.cn/jwglxt/kbcx/xskbcx_cxXsgrkb.html?gnmkdm=' + id + '&su=' + yhm+'&xnm='+xnm+'&xqm='+xqm+'&kzlx=ck'
# 首页
url='https://jwglxt.haut.edu.cn/jwglxt/xtgl/index_initMenu.html'
selenium_login(yhm,mm,url)
# 关闭浏览器
# browser.quit()
如果用selenium获取cookie只需要遍历获取name和value两对键值对即可,给requests使用时拼接成"name=value;name=value"放进headers里面