一位伙计自己开了个游戏室,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章,今天小编特此通过实例代码给大家介绍下Python selenium 加载并保存QQ群成员去除其群主、管理员信息的示例代码

模拟登陆页面

页面分析

思路:

点击登陆按钮

选择要登陆的账号

代码实现

# Author:smart_num_1

# Blog:https://blog.csdn.net/smart_num_1

# WeChat:Be_a_lucky_dog

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.ui import WebDriverWait

def login(driver = None):

already_dic = {}

# 创建一个字典,保存电脑登陆的QQ

login_button = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//p[@class="user-info"]/a')))

login_button.click()

# 点击登录,获取电脑登陆的QQ

already_login_number = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//div[@id="loginWin"]/iframe')))

driver.get(url = already_login_number.get_attribute('src'))

# 此步骤目的,是因为登录框是一个子页面,在上一级页面中获得到的这个子页面

already_login_numbers = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//span[contains(@class,"nick")]')))

# 获取电脑登陆的QQ

print('在以下账号中选择所需账号')

for already_login_number in already_login_numbers:

already_dic[already_login_number.get_attribute('innerText')] = already_login_number

print(already_login_number.get_attribute('innerText'))

QQ_NeedToLogin = input('需要登陆: ')

# 通过获取键名,在 already_dic 获得相应的键值

already_dic[QQ_NeedToLogin].click()

# 模拟点击要登陆的QQ,达到登陆的效果

time.sleep(1)

if __name__ == '__main__':

start_url = 'https://qun.qq.com/index.html#click'

# 群首页,用来登陆账号

driver = webdriver.Chrome(executable_path = './chromedriver.exe')

# 因为selenium 需要用到浏览器、浏览器驱动,但是还要配置环境变量,很麻烦,如果这样指定 webdriver 路径的话,就可以省去那一步

driver.get(url=start_url)

login(driver=driver)

选择所需加载群

页面分析

打开群管理界面,会看到这样的信息,我们的目的是爬取已加入群的成员信息

代码实现

# Author:smart_num_1

# Blog:https://blog.csdn.net/smart_num_1

# WeChat:Be_a_lucky_dog

def get_group_number(driver = None):

group_number_dic = {}

# 同样的,利用字典储存信息

my_group_list = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="my-group-list"]/li')))

# 获取每个已加入群的节点信息

print('在以下群中选择:')

i = 1

for my_group in my_group_list:

try:

group_number_dic[str(i)] = my_group

print('第 %s 个--- '%str(i) + my_group.get_attribute('title') + ' ' + my_group.get_attribute('data-id'))

i += 1

except:

continue

# 打印出获得的群信息,获取所有的目标群

group = input('获取群编号 : ')

# 通过键名获取键值,得到要点击的目标

group_number_dic[group].click()

return driver

if __name__ == '__main__':

member_url_test = 'https://qun.qq.com/member.html'

driver.get(url = member_url_test)

driver = get_group_number(driver=driver)

保存所需信息

页面分析

可以看到,是个动态加载的页面,因为用的是selenium,所以就没必要分析到底是通过请求那个url得到的信息,直接模拟滚动获取就可以了

代码实现

# Author:smart_num_1

# Blog:https://blog.csdn.net/smart_num_1

# WeChat:Be_a_lucky_dog

def get_group_member(driver = None):

driver.refresh()

# 刷新一下界面,防止上一步点击过后,页面不更新的情况

elem_end = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//td[@class="td-user-nick"]/img')))

# 添加了等待,这个定位可以随便的选择,确保页面加载完毕的

for i in range(10):

time.sleep(0.5)

driver.execute_script("var action=document.documentElement.scrollTop=10000")

print('加载中······')

# 这个滚动范围可以任选,因为每次会加载21个信息,我看过我加的群,在10次过后的成员基本属于潜水的人了,要不要的就无所谓了

group_members = driver.find_elements_by_xpath('//tr[contains(@class,"mb")]')

for group_member in group_members:

try:

data = group_member.text.split('\n')[2].split(' ')[0]

# 这一步,得到一个列表,从第一位开始分别是成员、群昵称、QQ号、性别、Q龄、入群时间、等级(积分)、最后发言,在这里我是只需要QQ号码

#对于其他信息,根据自己需要,添加代码即可

if data.isdigit() == True:

with open('./record.txt','a',encoding = 'utf-8') as record:

record.write(data + '@qq.com')

record.write('\n')

except:

continue

print('Loaded')

完整代码

# Author:smart_num_1

# Blog:https://blog.csdn.net/smart_num_1

# WeChat:Be_a_lucky_dog

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.chrome.options import Options

import time

import random

import os

def get_group_member(driver = None):

driver.refresh()

elem_end = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//td[@class="td-user-nick"]/img')))

for i in range(10):

time.sleep(0.5)

driver.execute_script("var action=document.documentElement.scrollTop=10000")

print('加载中······')

group_members = driver.find_elements_by_xpath('//tr[contains(@class,"mb")]')

for group_member in group_members:

try:

data = group_member.text.split('\n')[2].split(' ')[0]

if data.isdigit() == True:

with open('./record.txt','a',encoding = 'utf-8') as record:

record.write(data + '@qq.com')

record.write('\n')

except:

continue

print('Loaded')

def get_group_number(driver = None):

group_number_dic = {}

my_group_list = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//ul[@class="my-group-list"]/li')))

print('在以下群中选择:')

i = 1

for my_group in my_group_list:

try:

group_number_dic[str(i)] = my_group

print('第 %s 个--- '%str(i) + my_group.get_attribute('title') + ' ' + my_group.get_attribute('data-id'))

i += 1

except:

continue

group = input('获取群编号 : ')

group_number_dic[group].click()

return driver

def login(driver = None):

already_dic = {}

login_button = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//p[@class="user-info"]/a')))

login_button.click()

already_login_number = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_element_located((By.XPATH,'//div[@id="loginWin"]/iframe')))

driver.get(url = already_login_number.get_attribute('src'))

already_login_numbers = WebDriverWait(driver = driver,timeout = 100).until(EC.presence_of_all_elements_located((By.XPATH,'//span[contains(@class,"nick")]')))

print('在以下账号中选择所需账号')

for already_login_number in already_login_numbers:

already_dic[already_login_number.get_attribute('innerText')] = already_login_number

print(already_login_number.get_attribute('innerText'))

QQ_NeedToLogin = input('需要登陆: ')

already_dic[QQ_NeedToLogin].click()

time.sleep(1)

def start(driver = None,url = None):

print('Please wait for loading\n')

driver.get(url = url)

driver = get_group_number(driver=driver)

print('Please wait for loading\n')

get_group_member(driver=driver)

if __name__ == '__main__':

print('Please wait for loading')

chrome_options=Options()

chrome_options.add_argument('--headless')

try:

random.seed(time.time())

QQ_number = '738334209'

start_url = 'https://qun.qq.com/index.html#click'

member_url = 'https://qun.qq.com/member.html#gid=%s'%QQ_number

member_url_test = 'https://qun.qq.com/member.html'

driver = webdriver.Chrome(executable_path = './chromedriver.exe',chrome_options=chrome_options)

try:

driver.get(url=start_url)

login(driver=driver)

while True:

start(driver = driver,url = member_url_test)

flag = input('是否继续爬取? yes or no : ')

if flag == 'no':

break

os.system('cls')

driver.quit()

except:

print('Something wrong')

driver.quit()

except:

print('Something wrong!!!!!!')

os.system('pause')

总结

到此这篇关于Python selenium 加载并保存QQ群成员 去除其群主、管理员信息的示例代码的文章就介绍到这了,更多相关Python selenium 加载并保存QQ群成员内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

python qq群管理_Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码...相关推荐

  1. python爬取qq群成员_Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码...

    一位伙计自己开了个游戏室,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章,今天小编特此通过实例代码给大家介绍下Python selenium 加载并保存QQ群成员去除其群主.管理员信息的示例代 ...

  2. Python--selenium 加载并保存QQ群成员,去除其群主、管理员信息

    Python–selenium 加载并保存QQ群成员,去除其群主.管理员信息. 一位老哥自己开了个游戏,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章... 拙笔,拿来分享一下.纯属原创,其他 ...

  3. python网站打开慢_Python selenium页面加载慢超时的解决方案

    开发环境: win10-64  python2.7.16  chrome77 from selenium import webdriver driver = webdriver.Chrome(exec ...

  4. Python网络爬虫之图片懒加载技术、selenium和PhantomJS

    引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材ht ...

  5. 实现类似微博、QQ空间等的动态加载

    微博.QQ空间等的动态加载方式属于滚屏加载技术,获取当前滚动条位置来触发onscroll()函数,向服务器发起请求,将请求得到的新的数据动态加载在页面上 本文利用该原理实现了动态加载,但不是检测当前滚 ...

  6. java做类似于qq空间动态加载_实现类似微博、QQ空间等的动态加载

    微博.QQ空间等的动态加载方式属于滚屏加载技术,获取当前滚动条位置来触发onscroll()函数,向服务器发起请求,将请求得到的新的数据动态加载在页面上 本文利用该原理实现了动态加载,但不是检测当前滚 ...

  7. html中searchbutton点击没有反应,点击按钮加载完整的HTML后,使用Selenium加载其他元素...

    我想刮一页并收集所有链接.该页面显示30个条目并查看完整列表,点击全部加载按钮是必要的.点击按钮加载完整的HTML后,使用Selenium加载其他元素 我使用下面的代码: from selenium ...

  8. php站群系统,ThinkPhp内核逐鹿泛目录站群系统 毫秒级加载速度 丰富的内容库搭配(价值8000元)...

    [温馨提示]源码包解压密码:www.youhutong.com 资源描述 ThinkPhp内核逐鹿泛目录站群系统 毫秒级加载速度 丰富的内容库搭配(价值8000元) 源码介绍: 逐鹿泛目录站群完整源码 ...

  9. 高级安全Windows防火墙管理单元无法加载。请重新启动正在管理的计算机上的Windows防火墙服务,报错代码:0x6D9

    错误代码表示防火墙服务被禁用了. 当你再次发生上述错误的时候,我建议跟着下面的步骤检查: 1开始 >运行 >输入 services.msc    检查防火墙服务服务状态是否为启动 启动类型 ...

  10. QQ浏览器劫持video标签加载自己的广告(怎么解决?)

    QQ浏览器劫持video标签加载自己的广告(怎么解决?) QQ浏览器真的不讲一点规则,强制劫持视频video标签,这已经很 XX 了吧?还在视频结束时加载他们自己的广告,这... 就无语了. 相信开发 ...

最新文章

  1. python关于解决‘\u‘开头的字符串转中文的方法
  2. SpringMvc之参数绑定注解详解
  3. mybatis$和#的区别
  4. mysql 卸载插件_MySQL 插件安装或卸载(window validate_password 为例)
  5. Mysql数据库简单使用(二)
  6. 深度学习多模态融合_多模态深度学习:用深度学习的方式融合各种信息
  7. SouceInsight 快捷方式查看与修改
  8. 类ThreadLocal的使用与源码分析
  9. Cannot modify header information - headers already sent by (output started at 问题
  10. DB2数据库基本操作
  11. 基于Springboot的在线音乐网站开发与实现
  12. 局域网ip扫描工具_一款针对Profinet协议漏洞渗透的工具
  13. 创业指南:如何快速拿到天使投资?
  14. java utility 是什么_Java Utility类代码示例
  15. 年审是当月还是当天_车辆年审到期是指当月吗?
  16. 贫穷限制了想象:富豪200亿房产当摆设,贫民窟1440人共用一厕所
  17. 解题:POI 2008 Plot purchase
  18. python爬虫——https请求
  19. CF1383C 题解
  20. linux下查看本机IP的两种方法

热门文章

  1. 美学心得(第二百三十六集) 罗国正
  2. c语言快速数独生成器
  3. MacOS11.6.7上安装Axure9.003720无法预览问题
  4. nachos中文教程java_Nachos3.4系列-2 Makefile 与Nachos中文教程 【转】
  5. PN5321(PN5321A3HN/C106)国产替代,FSVP532软硬件兼容,支持A卡,B卡,FeliCa卡,支持ISO/IEC18092,ECM340点对点
  6. android 息屏锁频录音、录视频、电话自动录音
  7. 软件需求工程 高校教学平台 项目可行性报告
  8. JS 校验车牌号码(全)
  9. 教程分享:mp3语音转文字免费方法有哪些?
  10. efi文件错误服务器崩溃,[转自百度]关于系统安装时候弹出提示winload.efi文件损坏...