当前位置:   article > 正文

用selenium实现微博抽奖

用selenium实现微博抽奖

前置准备
1.准备Python环境,安装selenium(运行命令:pip install selenium==4.16.0);
2.准备谷歌浏览器以及与浏览器同版本的webdriver(driver下载地址),将driver文件与此.py文件放在一起,并将浏览器chrome.exe路径赋给option.binary_location。
代码

import random
import time

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

option = Options()
option.binary_location = r'.\doc\Chrome\Application\chrome.exe'
choujiang_url = 'https://www.weibo.com/5692100100/NC99xE0pd#repost'

# 打开浏览器
with webdriver.Chrome(option) as driver:
    driver.get('https://weibo.com/')
    print('手动登录')
    WebDriverWait(driver, 1e5).until(lambda d: d.find_elements(By.XPATH,
                                                               '//div[@class="woo-badge-box"]/img'))  # 寻找登入标记
    driver.get(choujiang_url)  # 抽奖微博链接
    user_set = set()  # 使用set集合储存转发用户,避免重复获取
    user_list_tmp = []
    while True:
        user_list_tmp = driver.find_elements(By.XPATH,  '//*[@id="scroller"]/div[1]/div//div/a[@usercard]')
        user_list_tmp = [tuple([e.accessible_name, e.get_attribute('href')]) for e in user_list_tmp]  # 用户名与主页链接
        print('此页获取的用户名:', [_[0] for _ in user_list_tmp])
        user_set.update(user_list_tmp)  # 录入集合
        driver.execute_script("window.scrollTo(0, window.scrollY + 300)")  # 页面下拉,刷新用户
        if driver.find_elements(By.XPATH, '//div[starts-with(@class,"Bottom_text_") '
                                          'and contains(text(), "没有更多内容了")]'):  # 获取完
            break
    driver.minimize_window()
    input(f'共获取{len(user_set)}位转发用户,按回车开始抽取')
    choujiang_list = list(user_set)  # 转储到list方便抽取
    zhongjiang_list = []  # 中奖名单
    time.sleep(random.random())  # 增加random的不确定性
    random.seed(time.time())
    for _ in range(3):  # 抽3人
        time.sleep(3)  # 停顿一下
        zhongjiang = random.choice(choujiang_list)  # 随机获取一位作为中奖者
        zhongjiang_list.append(zhongjiang)  # 记录中奖名单
        choujiang_list.remove(zhongjiang)  # 移除,以免重复抽到
        print(f'已抽取{_ + 1}名中奖者')
    time.sleep(1)
    print('中奖名单:', zhongjiang_list)
    # 打开每个中奖者主页
    for u in zhongjiang_list:
        driver.execute_script(f"window.open('{u[1]}','_blank');")
    time.sleep(1)
    driver.maximize_window()
    input('结束')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

注意:微博页面时常变动,正式使用前需要先测试,xpath可能需要修改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/242596
推荐阅读
相关标签
  

闽ICP备14008679号