首页 > 其他分享 >登录删除帖子

登录删除帖子

时间:2023-10-07 15:22:37浏览次数:38  
标签:loc code 登录 删除 self driver submit 帖子 def

优化后的代码
# 导包 from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep from selenium.webdriver.chrome.options import Options import ddddocr # 定义类 class GetEle: def __init__(self, driver): self.driver = driver def login_name_psw(self, loc_name, loc_psw, loc_submit, login_name, login_psw): # 账号和密码输入 self.driver.find_element(By.CSS_SELECTOR, loc_name).send_keys(login_name) self.driver.find_element(By.CSS_SELECTOR, loc_psw).send_keys(login_psw) self.driver.find_element(By.CSS_SELECTOR, loc_submit).click() def submit_login(self, loc): self.driver.find_element(By.CSS_SELECTOR, loc).click() class CodePass: def __init__(self, driver): self.driver = driver self.ocr = ddddocr.DdddOcr() def get_code(self, loc_code): # 获取验证码元素的位置和大小 ele_cap = self.driver.find_element(By.CSS_SELECTOR, loc_code) location = ele_cap.location size = ele_cap.size print(f"获取验证码元素位置location:{location},获取验证码元素大小size:{size}") # 获取整个页面截图 self.driver.save_screenshot("code.png") sleep(2) # 裁剪图片 image = Image.open('code.png') left = int(location['x']) top = int(location['y']) right = int(location['x'] + size['width']) bottom = int(location['y'] + size['height']) cropped_image = image.crop((left, top, right, bottom)) cropped_image.save("code.png") # 识别图片中的内容 with open('code.png', 'rb') as f: img_bytes = f.read() res = self.ocr.classification(img_bytes) print('识别出的验证码为:' + res) return res def input_code(self, loc, res): self.driver.find_element(By.CSS_SELECTOR, loc).send_keys(res) class TieDel: def __init__(self, driver): self.driver = driver def c_moren(self, loc): self.driver.find_element(By.CSS_SELECTOR, loc).click() def c_tie_1(self, loc): self.driver.find_element(By.CSS_SELECTOR, loc).click() def c_replay_num(self, loc): self.driver.find_element(By.XPATH, loc).click() def c_del(self, loc): self.driver.find_element(By.CSS_SELECTOR, loc).click() def input_reason(self, loc, reason): self.driver.find_element(By.CSS_SELECTOR, loc).send_keys(reason) def del_submit(self, loc): self.driver.find_element(By.CSS_SELECTOR, loc).click() # 调用 if __name__ == '__main__': driver = webdriver.Chrome() driver.maximize_window() # url url = r"http://XXX/forum.php" driver.get(url) # 实例化类 web_e = GetEle(driver) # 调用登录 loc_name = '#ls_username' loc_psw = '#ls_password' loc_submit = '.pn.vm>em' login_name = 'admin' login_psw = '123456' web_e.login_name_psw(loc_name, loc_psw, loc_submit, login_name, login_psw) # 输入验证码 sleep(3) print("进入第二阶段 输入验证码") c = CodePass(driver) code_loc = 'img[onclick*="updateseccode"]' res = c.get_code(code_loc) input_code_loc = 'input[id*=seccodeverify]' c.input_code(input_code_loc, res) # 提交登录按钮 submit_loc = '[name=loginsubmit]' web_e.submit_login(submit_loc) # 进入删除帖子模块 t = TieDel(driver) print("进入删除帖子模块") loc_moren = '[href*="forum.php?mod=forumdisplay"]>img' t.c_moren(loc_moren) print("1.点击默认板块的位置") loc_tie_1 = '#content_1+[href*="forum.php?mod=viewthread"]' t.c_tie_1(loc_tie_1) print("2.点击第一个帖子的位置") sleep(2) loc_replay_num = '//*[starts-with(@id, "manage") and number(substring-after(@id, "manage")) > 11]' t.c_replay_num(loc_replay_num) print("3.点击第一个帖子列表中的第8个回复里管理的位置") sleep(2) loc_del = '[onclick="modaction(\'delpost\')"]' t.c_del(loc_del) print("4.点击管理的按钮") sleep(2) loc_reason = '#reason' t.input_reason(loc_reason, '恶意灌水') print("5.输入删除的理由") sleep(2) loc_del_submit = '#modsubmit' t.del_submit(loc_del_submit) print("6.点击删除的确认按钮") # 退出 sleep(3) driver.quit()

 







# login_code.py # 导包 from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep from selenium.webdriver.chrome.options import Options import pytesseract # 导入ocr库 from PIL import Image # 导入图像处理库 import ddddocr # 定义类 class GetEle: def __init__(self,driver): self.driver=driver def login_name_psw(self,loc_name,loc_psw,loc_submit,login_name,login_psw): # 账号和密码输入 driver.find_element(By.CSS_SELECTOR,loc_name).send_keys(login_name) driver.find_element(By.CSS_SELECTOR, loc_psw).send_keys(login_psw) driver.find_element(By.CSS_SELECTOR, loc_submit).click() def submit_login(self,loc): driver.find_element(By.CSS_SELECTOR, loc).click() class CodePass: def __init__(self,driver): self.driver=driver def get_code(self,loc_code): # 获取全屏截图,获取坐标位置 ,截图保存 # 第一步 ---------获取到验证码的位置,截图,获取坐标 ele_cap = driver.find_element(By.CSS_SELECTOR, loc_code) # 获取元素的位置和大小 location = ele_cap.location size = ele_cap.size print(f"获取验证码元素位置location:{location},获取验证码元素大小size:{size}") # 获取整个页面截图 driver.save_screenshot("code.png") sleep(2) # 打开照片 captcha_image = Image.open("code.png") # 获取验证码的上下左右坐标 left = int(location['x']) top = int(location['y']) right = int(location['x'] + size['width']) bottom = int(location['y'] + size['height']) print(f"坐标展示 left:{left},top:{top},right:{right},bottom:{bottom}") # 第二步------------------利用坐标信息对截图图片做裁剪 # 打开图片 image = Image.open('code.png') # 裁剪图片 cropped_image = image.crop((left, top, right, bottom)) # 显示裁剪后的图片 # cropped_image.show() # 保存裁剪后的图片 cropped_image.save("code.png") # 延迟3秒 sleep(3) # 关闭照片 image.close() # 第三步-----------------------对截图做OCR识别 # 实例化一个ocr ocr = ddddocr.DdddOcr() # 以二进制格式打开verf.png图片用于只读 with open('code.png', 'rb') as f: # 用来读取文件 img_bytes = f.read() # 识别图片中的内容 res = ocr.classification(img_bytes) # 输出内容 print('识别出的验证码为:' + res) return res def input_code(self,loc,res): # 找到元素,输入code,点击 登录 driver.find_element(By.CSS_SELECTOR,loc).send_keys(res) class TieDel: def __init__(self,driver): self.driver=driver ''' # 1 默认板块的位置 moren_loc='[href*="forum.php?mod=forumdisplay"]>img' # 2 点击默认板块的位置,进入详情列表 t.click_del() # 3 列表的第一个帖子 one_tie_loc='#content_1+[href*="forum.php?mod=viewthread"]' # 4 第8个管理的位置 loc_8='#manage8' ''' # 1 点击默认板块的位置 def c_moren(self, loc_moren): driver.find_element(By.CSS_SELECTOR,loc_moren).click() # 2 在贴吧详情列表,点击第一个帖子 def c_tie_1(self, loc_tie_1): driver.find_element(By.CSS_SELECTOR,loc_tie_1).click() # 3 点击第一个帖子列表中的第8个回复里管理的位置 def c_replay_num(self, loc_replay_num): driver.find_element(By.XPATH,loc_replay_num).click()# XPATH # 4 点击弹出删除按钮 def c_del(self, loc_del): driver.find_element(By.CSS_SELECTOR, loc_del).click() # def input_reason(self, loc_reason,reason): driver.find_element(By.CSS_SELECTOR, loc_reason).send_keys(reason) # def del_submit(self, loc_del_submit): driver.find_element(By.CSS_SELECTOR, loc_del_submit).click() # 调用 if __name__ == '__main__': ''' # 创建无头浏览器选项 options = Options() options.add_argument("--headless") # 调用driver driver=webdriver.Chrome(options=options) ''' driver = webdriver.Chrome() # 最大化窗口 driver.maximize_window() # url url=r"http://XXX/forum.php" driver.get(url) # 实例化类 web_e=GetEle(driver) # 调用登录 loc_name='#ls_username' loc_psw='#ls_password' loc_submit='.pn.vm>em' login_name='admin' login_psw='123456' web_e.login_name_psw(loc_name,loc_psw,loc_submit,login_name,login_psw) # 输入验证码 sleep(3) print("进入第二阶段 输入验证码") c=CodePass(driver) code_loc = 'img[onclick*="updateseccode"]' res=c.get_code(code_loc) # 调用获取验证码 input_code_loc = 'input[id*=seccodeverify]' c.input_code(input_code_loc,res) # 提交登录按钮 submit_loc = '[name=loginsubmit]' web_e.submit_login(submit_loc) # 重头戏 进入删除帖子模块 t = TieDel(driver) print("进入删除帖子模块") # 1 默认板块的位置 loc_moren='[href*="forum.php?mod=forumdisplay"]>img' t.c_moren(loc_moren) print("1.点击默认板块的位置") # 2 列表的第一个帖子的位置 loc_tie_1='#content_1+[href*="forum.php?mod=viewthread"]' t.c_tie_1(loc_tie_1) print("2.点击第一个帖子的位置") # 3 第一个帖子列表中的第8个回复里【管理】按钮的位置 sleep(2) loc_replay_num='//*[starts-with(@id, "manage") and number(substring-after(@id, "manage")) > 11]' t.c_replay_num(loc_replay_num) print("3.点击第一个帖子列表中的第8个回复里管理的位置") # 4 弹出删除按钮 sleep(2) loc_del='[onclick="modaction(\'delpost\')"]' t.c_del(loc_del) print("4.点击管理的按钮") # 5 输入删除的理由 sleep(2) loc_reason='#reason' t.input_reason(loc_reason,'恶意灌水') print("5.输入删除的理由") # 6 点击确定删除按钮 sleep(2) loc_del_submit='#modsubmit' t.del_submit(loc_del_submit) print("6.点击删除的确认按钮") # 退出 sleep(3) driver.quit()

 

标签:loc,code,登录,删除,self,driver,submit,帖子,def
From: https://www.cnblogs.com/haha1988/p/17746392.html

相关文章

  • 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
    [16:36:16root@centos8~]#cat-A/etc/fstab$#$#/etc/fstab$#CreatedbyanacondaonMonJul1912:39:262021$#$#Accessiblefilesystems,byreference,aremaintainedunder'/dev/disk/'.$#Seemanpagesfstab(5),findfs(8),mount(8)and/orblkid(......
  • 常数时间对数组进行-删除-查找-随机提取元素
    参考:380.O(1)时间插入、删除和获取随机元素众所周知,数组这类数据结构可以实现O(1)的获取,所以结合rand()函数就能实现随机获取,但是数组的存储方式又是连续的,这就意味着,插入和删除时需要有大量的元素需要移动,所以不能实现O(1)的插入(末尾除外)和删除。能够实现O(1)的插入和删除的......
  • 解除Windows11 最新iso镜像新限制(微软账户登录和需要TPM)一法
        Windows11新镜像ISO文件安装时逼着你非得绑定微软账户,想继续像Windows7那样用本地账户登录。现在不管是Windows11的21H2还是22H2,装系统都得硬着头皮登录微软账户,哪怕你断了网也别想装。以下方法可以避免这个限制,同时解决不需要TPM的问题。:使用Rufus制作USB安装盘,Ru......
  • 【TinyWebServer】12注册登录
    整体概述本项目中,使用数据库连接池实现服务器访问数据库的功能,使用POST请求完成注册和登录的校验工作。本文内容本篇将介绍同步实现注册登录功能,具体的涉及到流程图,载入数据库表,提取用户名和密码,注册登录流程与页面跳转的的代码实现。流程图具体的,描述了GET和POST请求下的页......
  • Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件
    Minecraft个人服务器搭建自己的皮肤站并实现外置登录更换自定义皮肤组件大家好,我是艾西有不少小伙伴非常喜欢我的世界Minecraft游戏,今天小编跟大家分享下Minecraft个人服务器怎么设置皮肤站。Minecraft皮肤站是什么?其实官网就有皮肤站,在正版用户选择正版的登录后,MC客户端就会到官方......
  • webapi 登录接口acctID参数获取SQL
    USEK3DBConfiger20216155555176selectA.FNUMBER,B.FNAME,A.FDATABASENAME,A.FDATACENTERIDFROMT_BAS_DATACENTERASALEFTJOINT_BAS_DATACENTER_LASBONA.FDATACENTERID=B.FDATACENTERIDANDA.FLANGUAGE=B.FLOCALEID FDATACENTERID字段......
  • java——redis随笔——实战——短信登录
    前言: 此章节用到的知识点:mybatisPlus ;参考网址:https://www.bilibili.com/video/BV1Xu411A7tL?p=7&vd_source=79bbd5b76bfd74c2ef1501653cee29d6  正常新建一个接口: 再新建这个接口的实现类:  修改接口: 修改实现类:  然后就可以注入并使用了:   ......
  • pig4cloud框架系列三:密码模式换取token(登录认证)
    1,通过apiFox或者postMan模拟调用接口,使用密码模式获取token 2,首先代码会先来到ProviderManager类的authenticate方法,也就是登录认证的入口 3,先到AuthenticationProvider接口,然后到AbstractUserDetailsAuthenticationProvider实现类的authenticate方法 4,authenticate方法......
  • Leetcode刷题83. 删除排序链表中的重复元素
    给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。示例1:输入:head=[1,1,2]输出:[1,2]示例2:输入:head=[1,1,2,3,3]输出:[1,2,3] 提示:链表中节点数目在范围 [0,300] 内-100<=Node.val<=100题目数......
  • 基于Java的考编论坛网站的设计与实现(亮点:在线发布帖子、内容评论回复、购买二手物品、
    (考编论坛网站)网上大部分的毕设套路如下:在b站发毕设项目的演示视频,让你免费领取,你领取完发现代码不全或者数据库少表,根本跑不起来!如果要调试则收费300:sweat_smile:真的是恶心至极有没有!某宝找人帮忙写,简单来说比第一种行为靠谱,但是很贵!说是可以免费修改其实修改基本排不上队,......