您的位置:首页 > 健康 > 美食 > 唐山网站设计_正规的网站制作与推广_宁波网站建设制作报价_如何做好线上推广

唐山网站设计_正规的网站制作与推广_宁波网站建设制作报价_如何做好线上推广

2024/12/27 19:15:58 来源:https://blog.csdn.net/Zb_Xl/article/details/144574219  浏览:    关键词:唐山网站设计_正规的网站制作与推广_宁波网站建设制作报价_如何做好线上推广
唐山网站设计_正规的网站制作与推广_宁波网站建设制作报价_如何做好线上推广

本文使用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()

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com