自动获取Bilibili Token

项目设定
在本项目中,我希望实现的是自动登录 Bilibili,并获取用户的登录 token 以及相关的 cookie 信息。由于 Bilibili 对登录流程有一定的保护机制,这为我的项目带来了一些挑战。

功能需求
自动化登录 Bilibili:使用用户名和密码登录 Bilibili。
获取 Token 信息:在登录成功后,获取 token 信息及相关 cookie 数据。
配置文件更新:将获取的 token 信息写入本地配置文件,并将其移动到指定的网络路径。
技术栈
编程语言: Python
库: Selenium(用于浏览器自动化)、toml(用于读取和写入配置文件)、shutil(用于文件操作)。
开发过程
下面是整个软件的实现代码及其分步解释。

1. 环境准备
首先,我们需要安装 Chrome 浏览器及其对应的 ChromeDriver。我们通过 Selenium 来操作 Chrome 浏览器,所以在代码中配置了无痕模式,以避免遗留登录信息。

<PYTHON>
chrome_options = Options()
chrome_options.add_argument('--incognito')
chrome_options.add_argument('--disable-usb')
chrome_options.add_argument('--disable-logging')
chrome_options.add_argument('--log-level=3')
driver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
2. 检查执行频率
由于数据读取频率设定为每小时,我为程序增加了一个检查机制,确保在整点后的五分钟内程序不会执行。这是为了避免在高并发时产生的数据错误。

<PYTHON>
def is_in_post_hour_window():
    current_time = datetime.now()
    if current_time.minute < 5:
        print("docker可能正在执行,请稍作等待")
        input("按任意键退出程序...")
        return True
    return False
3. 自动化登录
使用 Selenium 实现自动化登录,首先访问 Bilibili 网站,然后通过构造 XPath 找到登录按钮并执行点击操作。

<PYTHON>
driver.get(url)
try:
    button_xpath = '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/li/div/div/span'
    target_button = WebDriverWait(driver, 3).until(
        EC.element_to_be_clickable((By.XPATH, button_xpath))
    )
    target_button.click()
    print("已点击登录")
except Exception as e:
    print(f"发生错误:{e}")
接着,我们定位用户名和密码的输入框并进行填充,最后提交登录请求。

4. 登录成功的判断
在登录过程中,需要确保登录成功。我通过检查用户头像的变化来实现这一步。如果页面加载成功且头像出现,说明登录成功。

<PYTHON>
user_avatar_xpath = '//*[@id="i_cecream"]/div[2]/div[1]/div[1]/ul[2]/li[1]/div[1]/a[2]/div/img'
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, user_avatar_xpath))
)
print("登录成功!")
5. 获取 Token 信息
登录成功后,我们利用 JavaScript 执行命令提取用户的 localStorage 中需要的字段,以及 cookies 中的相关值。

<PYTHON>
ac_time_value = driver.execute_script("return window.localStorage.ac_time_value;")
cookies = driver.get_cookies()
sessdata = next((cookie['value'] for cookie in cookies if cookie['name'] == 'SESSDATA'), None)
bili_jct = next((cookie['value'] for cookie in cookies if cookie['name'] == 'bili_jct'), None)
6. 配置文件操作
我们使用 toml 库读取本地配置文件,并在获取到的 token 信息中进行替换,最后保存文件。

<PYTHON>
config_path = os.path.join(os.path.expanduser("~"), "Desktop", "config.toml")
try:
    config_data = toml.load(config_path)
    config_data['credential']['sessdata'] = sessdata
    ...
    with open(config_path, 'w', encoding='utf-8') as f:
        toml.dump(config_data, f)
    print(f"配置已更新并保存到: {config_path}")
except Exception as e:
    print(f"读取或写入 config.toml 文件时发生错误: {e}")
7. 移动文件到网络路径
最终一步是将本地更新的配置文件移动到指定的网络路径。此步骤确保其他服务可以使用最新的配置文件。

<PYTHON>
network_config_path = r"\\Milkmonkey\docker\bilisync\config\config.toml"
try:
    shutil.copy(config_path, network_config_path)
    print(f"配置文件已成功移动到网络文件夹并覆盖原文件:{network_config_path}")
except Exception as e:
    print(f"移动文件时发生错误: {e}")
8. 退出浏览器及完结
在完成所有操作后,程序将关闭浏览器并退出。

<PYTHON>
driver.quit()
sys.exit(0)
结语
在整个开发过程中,我面临了多次异常与错误处理,但最终通过充分利用 Selenium 和 Python 库实现了目标。这款自动获取 Bilibili Token 的软件为我的日常操作提供了便利,也让我在自动化开发方面有了进一步的认识。希望对有需要的朋友能有所帮助!

在B站(Bilibili)上批量删除自己的评论通常需要通过B站的API来进行,但这并不是所有用户都能直接操作的,因为API访问权限有限,且需要实名认证并获得开发者权限。以下是基本思路: 1. **注册并开通开发者中心**:首先,你需要成为B站官方的开发者,完成身份验证并获取API密钥。 2. **安装所需库**:如果你打算使用Python,可以使用`bilibili_api`或`py-bilibili`等第三方库,它们提供了对B站API的封装。 ```python pip install bilibili_api ``` 3. **设置授权**:使用你的API密钥、应用ID(client_id)以及access_token来初始化客户端: ```python from bilibili_api import Bilibili api = Bilibili(client_id='your_client_id', client_secret='your_client_secret', cookie='your_bilibili_cookie') ``` 4. **查询评论**:找到你要删除的视频ID,然后获取该视频下的评论列表: ```python video_id = 'your_video_id' comments = api.live_comment.get(video_id) ``` 5. **筛选和删除评论**:遍历评论,判断是否为自己发布的,并调用`delete_comment`方法删除: ```python for comment in comments: if comment['author']['mid'] == your_user_mid: # replace 'your_user_mid' with your Bilibili账号的mid api.live_comment.delete(comment['cid']) # 删除评论 ``` 6. **处理异常**:确保处理可能出现的错误,如请求失败、权限不足等。 **注意**:由于B站的政策,这种自动化操作可能会受到限制,频繁的评论删除可能会触发平台的安全机制。在实际操作前,请确保了解相关规定,并尽量避免大规模频繁操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值