selenium模拟某网校带密码登陆

news/2024/12/20 6:50:35/

本文使用selenium在火狐浏览器模拟密码登陆某网校,使用css选择器点击

带密码登陆

打开网校登陆界面,可以看到有三个登陆选项,这里选择第二个,普通登陆

 我们需要填写用户名和密码,最后勾选用户协议点击登陆按钮

首先获取【普通登陆】的css选择器,接着在新页面依次获取用户名、密码、勾选用户协议和登陆的css选择器

 可以采用显示等待点击,这里设置10秒

login_option = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.common'))
)
login_option.click()

也可以导入time库,使用time.sleep(10)等待加载

login_button = driver.find_element(By.CSS_SELECTOR, '#normalSubmit')  # 替换为登录按钮的 CSS 选择器
login_button.click()

关闭登陆后的广告

登陆后会弹出一个广告,不一定只有这一类 ,我们写一个函数,专门用来叉掉广告,每次遇到拦停代码的广告,获取它的css选择器,添加进广告列表

def close_advertisement(selectors):for selector in selectors:try:# 等待并点击广告关闭按钮close_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, selector)))close_button.click()print(f"关闭了广告: {selector}")return True  # 成功关闭广告,返回 Trueexcept Exception as e:print(f"未找到广告关闭按钮: {selector}")continue  # 如果当前选择器未找到,尝试下一个return False  # 如果没有按钮能点击,返回 False# 广告关闭按钮选择器列表
selectors = ['i.el-icon-close:nth-child(2)','.ystk-popupBtn > a:nth-child(2)','.share_down'
]# 尝试关闭广告
if not close_advertisement(selectors):print("没有找到广告关闭按钮,继续执行后续程序...")

登陆后点击新开页面解决方法

接下来点击题库,发现浏览器新开了一个界面,并且再次弹出广告,我们需要切换窗口,并关闭广告

# 获取所有打开的窗口句柄
handles = driver.window_handles# 切换到新打开的窗口
driver.switch_to.window(handles[-1])

 最后看看页面html我们拿到没

源码

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
import time# 启动 Firefox 浏览器
driver = webdriver.Firefox(executable_path='D:/Users/Admin/Downloads/geckodriver.exe')  # 根据你的地址来# 访问目标网页
driver.get('https://passport.233.com/login/?redirectURL=https%3A//www.233.com/')# 等待页面加载
time.sleep(2)# 显式等待并点击登录选项(使用 a.common 作为登录按钮)
login_option = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.common'))
)
login_option.click()# 输入用户名和密码
username_input = driver.find_element(By.NAME, 'account')  # 根据实际页面元素定位用户名输入框
password_input = driver.find_element(By.NAME, 'password')  # 根据实际页面元素定位密码输入框# 填写登录信息
username_input.send_keys('username')  # 替换为实际的用户名
password_input.send_keys('password')  # 替换为实际的密码# 点击协议复选框
protocol_checkbox = driver.find_element(By.CSS_SELECTOR, '.js-protocolCheck')  # 根据 CSS 选择器定位协议复选框
if not protocol_checkbox.is_selected():  # 如果协议复选框尚未选中protocol_checkbox.click()  # 勾选协议复选框# 点击登录按钮
login_button = driver.find_element(By.CSS_SELECTOR, '#normalSubmit')  # 替换为登录按钮的 CSS 选择器
login_button.click()# 等待一段时间,确保登录完成
time.sleep(5)# 定义一个函数来尝试点击广告关闭按钮
def close_advertisement(selectors):for selector in selectors:try:# 等待并点击广告关闭按钮close_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, selector)))close_button.click()print(f"关闭了广告: {selector}")return True  # 成功关闭广告,返回 Trueexcept Exception as e:print(f"未找到广告关闭按钮: {selector}")continue  # 如果当前选择器未找到,尝试下一个return False  # 如果没有按钮能点击,返回 False# 广告关闭按钮选择器列表
selectors = ['i.el-icon-close:nth-child(2)','.ystk-popupBtn > a:nth-child(2)','.share_down'
]# 尝试关闭广告
if not close_advertisement(selectors):print("没有找到广告关闭按钮,继续执行后续程序...")time.sleep(3)# 点击题库
question_bank = driver.find_element(By.CSS_SELECTOR, '.topNav-rtLink-tiku > a:nth-child(1)')
question_bank.click()time.sleep(5)# 获取所有打开的窗口句柄
handles = driver.window_handles# 切换到新打开的窗口
driver.switch_to.window(handles[-1])# 关闭广告
# 使用显式等待,确保广告关闭按钮可点击
close_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'i.el-icon-close:nth-child(2)'))
)
close_button.click()# 点击做题
do_question = driver.find_element(By.CSS_SELECTOR, 'div.item-section:nth-child(2) > div:nth-child(1) > div:nth-child(3) > button:nth-child(4)')
do_question.click()time.sleep(5)# 可以在这里进一步操作,如检查是否成功登录,或者爬取其他内容
print(driver.page_source)# 关闭浏览器
driver.quit()

 


http://www.ppmy.cn/news/1556594.html

相关文章

环境变革下 B2B 销售的转型与创新:开源 AI 智能名片与 S2B2C 商城小程序的助力

摘要:本文探讨了在信息科技与互联网迅猛发展所引发的环境改变背景下,B2B 销售工作面临的挑战与机遇。深入分析了传统销售模式的局限性以及新环境对销售人员素质和能力的要求,提出从提供“信息”向提供“业务价值”转变的必要性。同时&#xf…

大模型应用编排工具Dify之自定义工具

1.前言 ​ dify中提供了自定义工具的能力,工具十分容易复用,在需要的流程编排中进行引用即可。根据笔者的经验和理解,自定义工具有点类似微服务,可以把通用的能力封装到工具里面。同时,工具还提供了测试和鉴权等功能&…

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器,用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…

【Python】pandas库---数据分析

大学毕业那年,你成了社会底层群众里,受教育程度最高的一批人。 前言 这是我自己学习Python的第四篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的NumPy数据分析,没看过的同学可以去看看:【Pyt…

SAP抓取外部https报错SSL handshake处理方法

一、问题描述 SAP执行报表抓取https第三方数据,数据获取失败。 报错消息: SSL handshake with XXX.COM:449 failed: SSSLERR_SSL_READ (-58)#SAPCRYPTO:SSL_read() failed##SapSSLSessionStartNB()==SSSLERR_SSL_READ# SSL:SSL_read() failed (536875120/0x20001070)# …

MySQL LEFT JOIN 性能优化策略

文章目录 写在文章开头详解MySQL left join场景描述讲讲join的原理能不能说说这个LEFT JOIN如何加索引left join on 左右字段是否都需要加索引?为什么?你觉得针对联表查询还有那些优化技巧小结参考写在文章开头 连接查询算是日常比较常用的数据库关联关键字涉及左外连接、右…

排序算法深度好文(图解 + 代码解析 + 误区 QA )——学排序看这一篇就够了!!!

排序算法 一、概述 1. 内部排序 (1) 冒泡排序 (2) 选择排序 a. 简单选择排序 b. 堆排序 (3) 插入排序 a. 直接插入排序 b. 希尔排序 (4) 快速排序 快速排序 hoare 版本 快速排序挖坑法 优化一随机化快速排序 优化二中位数三分法 (5) 归并排序 (6) 基数排序 2. …

1095. 格子图2

题目描述 给出一个 n ∗ m n*m n∗m的格子图,你从左上角 ( 0 , 0 ) (0,0) (0,0)出发,每次只能向右走或者向下走,问有多少种方法能走到 ( n , m ) (n,m) (n,m)这个格子? 输入 一行,两个整数 n n n, m m m,其中 n < = 1000000 n<=1000000 n<=