起初是想抓取下请求看能不能做模拟登录。无奈发现,目标网站的请求数据是加密过的,而且网站代码也是编译后的代码。要从编译后的代码中提取加密算法。我的第一想法是明知不可为而不为。但是转念一想,何不试试python大法。
1.前期准备
python我是真不会,属于半吊子的那种。作为纯前端开发人员,我只是基于兴趣以及开发语言万变不离其宗的换套不换药的至理,闲暇之余,看了看php,看了看java,看了看易语言,看了看python,仅此而已。
所以,我分享的都是一些小工具,类似代码片段的拿来即用的东西。对于初学者或者新手也是通俗易懂的东西吧。
python版本:3.12 window10安装python附带的版本。该版本自带pip,推荐
安装依赖库:pip install selenium (自动化模拟操作依赖)
pip install colorama (控制台输出字体颜色依赖)
2.模拟测验
这里测试的网址是航空网站,仅测试。该博客仅做技术分享以及技术思维扩展。切勿进行非法行为。
login.py代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from colorama import init, Fore
# 启动 Chrome 浏览器
driver = webdriver.Chrome()
# 打开登录页面
driver.get('https://b2c.csair.com/B2C40/modules/bookingnew/manage/login.html?lang=cn&returnurl=https://coep.csair.com/enterprise/#/personalEmailAuth?recommendCode=&actionType=')
print(Fore.RED + "开始模拟登录,请等待...")
tab = driver.find_element(By.CLASS_NAME, 'member-login')
tab.click()
driver.implicitly_wait(2)
# 在用户名和密码输入框中输入
account = driver.find_element(By.ID, 'userId')
account.send_keys('xxxx')
# 等待第一个输入框出现并点击
first_input = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, 'passWordPH'))
)
first_input.click() # 点击第一个输入框使其获得焦点
# 等待第二个输入框出现
second_input = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.ID, 'passWord'))
)
# 在第二个输入框中输入密码
second_input.send_keys('xxxx')
check = driver.find_element(By.ID, 'loginProtocol')
check.click()
print(Fore.GREEN + "账号:xxxx")
print(Fore.GREEN + "密码:xxxx")
# 提交登录表单
btn = driver.find_element(By.ID, 'mem_btn_login')
btn.click()
# 等待页面加载完成,然后抓取响应内容
# 页面加载完成后,获取页面源代码
WebDriverWait(driver, 10).until(
# 这里需要一个条件,比如等待某个特定元素出现
EC.presence_of_element_located((By.CLASS_NAME, 'xo-input-container'))
)
cookies = driver.get_cookies()
# 打印获取到的 cookie 信息
for cookie in cookies:
# print(Fore.BLUE + f"Name: {cookie['name']}, Value: {cookie['value']}")
if cookie['name'] == 'cs1246643sso':
print(f"token: {cookie['value']}")
break
print(Fore.RED + "登录结束,关闭浏览器!")
# 关闭浏览器
driver.quit()
原理:这里是利用自动化模拟网页登录操作,通过
driver = webdriver.Chrome()来打开浏览器,然后输入网址打开网页,再通过获取一系列标签元素进行触发点击事件。再把登录得cookie等相关信息进行控制台打印输出。
实操结果:
3.结束语
有时候通过一些小例子,更能方便我们理解。比如什么叫python自动化。这个小例子就是了。所以每个语言都有它的长处和魅力所在,现在知道python为什么适合做大数据分析和自动化测试了吧。自动化的适用场景就相当于一个盒子无法从内部破解,里面的机关太过于繁琐和复杂。但是这个盒子里面再怎么巧妙,提供给人的用途都是很直观的,就比如汽车。你只需要会开车就行,而不需要去学如何造车。人开车久了难免会累,这时候自动驾驶就来了。就相当于自动化了。
工欲善其事必先利其器!