1. 程式人生 > 程式設計 >Python selenium 載入並儲存QQ群成員,去除其群主、管理員資訊的示例程式碼

Python selenium 載入並儲存QQ群成員,去除其群主、管理員資訊的示例程式碼

一位夥計自己開了個遊戲室,想在群里拉點人,就用所學知識幫幫忙,於是就有了這篇文章,今天小編特此通過例項程式碼給大家介紹下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,'//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,'//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,'//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,'//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',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,'//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,'//p[@class="user-info"]/a')))
 login_button.click()
 already_login_number = WebDriverWait(driver = driver,'//div[@id="loginWin"]/iframe')))
 driver.get(url = already_login_number.get_attribute('src'))
 already_login_numbers = WebDriverWait(driver = driver,"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')

轉載請標明出處:https://blog.csdn.net/smart_num_1/article/details/106326488

總結

到此這篇關於Python selenium 載入並儲存QQ群成員 去除其群主、管理員資訊的示例程式碼的文章就介紹到這了,更多相關Python selenium 載入並儲存QQ群成員內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!