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()
相关推荐
小孩玩什么3 小时前
堆排:一种高效的比较排序算法
java·c语言·数据结构·经验分享·redis·算法·排序算法
jzdr5 小时前
iPhone通话记录生成器,苹果一键生成通话记录,手机ios制造专家
经验分享
jiaoxingk7 小时前
Playwright 解决京东滑块:自动化挑战大揭秘
python·测试工具·自动化
钱钱钱端7 小时前
软件测试工程师面试整理 —— 编程与自动化!
自动化测试·软件测试·selenium·测试工具·面试·职场和发展
CL_IN7 小时前
电商店铺数据集成到金蝶云星辰V2的实践经验分享
前端·经验分享·安全
??? Meggie7 小时前
【Python】 使用Selenium获取网页表格的方法(find_element的方法)
开发语言·python·selenium
我是Superman丶7 小时前
【Python】使用Selenium 操作浏览器 自动化测试 记录
selenium·测试工具
技术小赵9 小时前
facebook商业管理平台有什么作用?
经验分享
zfj3219 小时前
工具篇-postman快速导入&全局变量设置&简单压测
测试工具·postman·http请求工具·curl导入·postman全局变量设置