结合使用selenium库和chromedriver,可以编写一个脚本来模拟用户实现登录过程:使用selenium启动Chrome浏览器,定位到登录页面中的用户名和密码输入框,自动填充账号和密码信息,接着触发登录按钮完成登录操作,登录成功后可提取该Token信息,以便后续的自动化操作或进行身份验证

一、依赖安装

1.1 软件版本

软件 查看版本命令 信息
Python python3 -V 3.11.9 / 3.9.9
Selenium pip3 show selenium 4.26.1
chrome google-chrome –version 130.0.6723.91
chromedriver chromedriver –version 130.0.6723.91

chrome与chromedriver版本最好保持一致

1.2 安装selenium

1
pip3 install selenium

1.3 安装chrome

  • 下载安装包

    1
    sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
  • 安装依赖

    1
    sudo yum install -y --enablerepo=base google-chrome-stable

    如果自动下载GPG密钥失败,你可以尝试手动下载并安装它。使用以下命令:wget https://dl.google.com/linux/linux_signing_key.pub,sudo rpm --import linux_signing_key.pub

  • 安装chrome

    1
    sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

1.4 安装chromedriver

  • 资源网站根据chrome版本号,下载安装包
    1
    wget https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.91/linux64/chromedriver-linux64.zip
  • 解压移动资源
    1
    2
    unzip chromedriver-linux64.zip
    cp chromedriver /usr/local/bin/

二、执行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import time

# 替换为你的登录信息
USERNAME = 'admin'
PASSWORD = 'admin'
URL = 'http://127.0.0.1/#/login'

# 指定ChromeDriver的路径
chromedriver_path = '/usr/local/bin/chromedriver'
service = Service(executable_path=chromedriver_path)
# 指定Chrome浏览器的路径
chrome_path = '/opt/google/chrome/chrome'

# 初始化WebDriver,这里以Chrome为例
options = Options()
options.add_argument('--no-sandbox') # 解决DevToolsActivePort文件不存在的报错
options.add_argument('window-size=1920x3000') # 设置浏览器分辨率
options.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
options.add_argument('--hide-scrollbars') # 隐藏滚动条,应对一些特殊页面
options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片,提升运行速度
options.add_argument('--headless') # 浏览器不提供可视化界面。Linux下如果系统不支持可视化不加这条会启动失败

driver = webdriver.Chrome(service=service, options=options)

def get_info_from_local_storage():
localStorageMap = {}
localStorageItems = driver.execute_script("return Object.keys(localStorage);")
print(localStorageItems)
for key in localStorageItems:
value = driver.execute_script(f"return localStorage.getItem('{key}');")
localStorageMap[key] = value
# 打印Map的内容
for key, value in localStorageMap.items():
print(f'{key}: {value}')

try:
# 打开登录页面
driver.get(URL)
# 找到用户名和密码输入框,输入相应的信息

# 定位用户名输入框并输入用户名
username_input = driver.find_element(By.CSS_SELECTOR, 'input[type="text"]')
username_input.send_keys(USERNAME) # 替换为你的用户名

# 定位密码输入框并输入密码
password_input = driver.find_element(By.CSS_SELECTOR, '.ivu-input.ivu-input-large[type="password"]')
password_input.send_keys(PASSWORD) # 替换为你的密码

# 找到登录按钮并点击(需要根据实际页面元素进行调整)
login_button = driver.find_element(By.XPATH, "//button[@type='submit']") # 假设登录按钮有一个 type 属性为 "submit"
login_button.click()

# 找到登录按钮并点击
login_button = driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]') # 根据实际情况修改选择器
login_button.click()

# 等待页面加载完成
time.sleep(2) # 根据实际情况调整等待时间

get_info_from_local_storage()

finally:
# 关闭浏览器
driver.quit()

注意点:

  1. options某些参数若不设置可能会出现异常错误,例如SessionNotCreatedException等;
  2. 元素定位选择可尝试多种方式,若使用placeholder在Linux环境中not found.