selenium模拟某网校带密码登陆

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

带密码登陆

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

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

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

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

python 复制代码
login_option = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.common'))
)
login_option.click()

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

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

关闭登陆后的广告

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

python 复制代码
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  # 成功关闭广告,返回 True
        except 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("没有找到广告关闭按钮,继续执行后续程序...")

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

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

python 复制代码
# 获取所有打开的窗口句柄
handles = driver.window_handles

# 切换到新打开的窗口
driver.switch_to.window(handles[-1])

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

源码

python 复制代码
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  # 成功关闭广告,返回 True
        except 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()
相关推荐
测试老哥1 小时前
Postman环境变量设置全攻略
自动化测试·软件测试·python·测试工具·职场和发展·接口测试·postman
胜天半月子2 小时前
接口测试 | 使用Postman实际场景化测试
测试工具·接口测试·postman
〆WangBenYan゜3 小时前
postman 调用接口设置全局变量
测试工具·lua·postman
云半S一3 小时前
春招准备之Linux系统篇
linux·经验分享·笔记
酌量4 小时前
从 ROS 订阅视频话题到本地可视化与 RTMP 推流全流程实战
经验分享·笔记·ffmpeg·音视频·ros
SunnyDays10114 小时前
C# 实现高保真 Excel 转 PDF(无需 Office 环境)
经验分享·c#·excel转pdf
我要学习别拦我~8 小时前
桑基图、弦图、旭日图:如何表现复杂流向关系
经验分享·信息可视化·数据可视化
程序员小远9 小时前
软件测试之压力测试详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·压力测试
聪明的笨猪猪10 小时前
Java JVM “类加载与虚拟机执行” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试