前一篇带各位实作了 Instagram 点选朋友的所有文章,并按赞,再锁定并点击关闭按钮。
今天要来实战 Discord 的自动留言机器人,原理是让 Selenium 用自己的帐号密码登入 Discord,让其重新导向到平到,并锁定对话框,输入讯息後自动传出。
我们这次帐号密码的部分会使用环境变数的方式来储存。
将帐号密码写於 .env
档案中
执行程序後能够在指定服务器与频道内发言
首先,我们要使用 dotenv 这个套件来进行环境变数的操作。先安装这个套件。
pipenv install python-dotenv
安装完毕後,我们就能将环境变数写在 .env
这个档案内了。接下来,开启一个新的档案叫 .env
注意 . 的前面没有文字,将 Discord 的信箱与密码输入。
再来,我们就能在 Python 中去取得这些环境变数了,只要进行以下操作。
from dotenv import load_dotenv
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
接下来,我们进入想要发言的服务器内的频道 https://discord.com/channels/868043633197195314/874469620164227143,用 Selenium 开启会发现被导向了登入的页面,我们能分析一下邮件与密码的栏位。
再来,我们将其的 XPath 复制,并撰写个 Selenium 锁定他们,并将资料用 send_keys()
传入。
可以发现成功将信箱与密码传入了,我们再利用开发工具锁定登入按钮,并用 click()
点击该按钮进行登入。
from selenium import webdriver
from time import sleep
from dotenv import load_dotenv
import json
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
if __name__ == '__main__':
with open('cookies_jar.json') as f:
cookies = json.load(f)
driver = webdriver.Chrome()
driver.get('https://discord.com/channels/868043633197195314/874469620164227143')
sleep(1)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[1]/div/div[2]/input').send_keys(email)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[2]/div/input').send_keys(password)
成功进行登入。
接下来,利用开发工具定位到留言框复制 XPath ,并在程序中锁定该元素,之後 send_keys
传入需要发言的文字,最後加个 \n
来进行发送。
from selenium import webdriver
from time import sleep
from dotenv import load_dotenv
import json
import os
load_dotenv()
email = os.getenv('email')
password = os.getenv('password')
if __name__ == '__main__':
with open('cookies_jar.json') as f:
cookies = json.load(f)
driver = webdriver.Chrome()
driver.get(
'https://discord.com/channels/868043633197195314/874469620164227143')
sleep(1)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[1]/div/div[2]/input').send_keys(email)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/div[2]/div/input').send_keys(password)
driver.find_element_by_xpath(
'/html/body/div/div[2]/div/div/div/div/form/div/div/div[1]/div[2]/button[2]/div').click()
sleep(4)
driver.find_element_by_xpath(
'/html/body/div[1]/div[2]/div/div[2]/div/div/div/div[2]/div[2]/div[2]/main/form/div[1]/div/div/div[1]/div/div[3]/div[2]/div').send_keys('大家好\n')
今天实作了自动发送留言至 Discord 的频道中,如果想要扩充,可以使用 crontab 定时发言。也使用了 python-dotenv 来做环境变数的取得。
在版本控制的状况下,需要在 .gitignore
下写入 .env
避免将个资也 public 上去。
明天会带各位爬取已经写好的 API 上的资料。
Python dotenv 介绍与使用教学: https://myapollo.com.tw/zh-tw/python-dotenv/
Discord on web : https://discord.com/app
Selenium docs : https://readthedocs.org/projects/selenium-python/downloads/pdf/latest/
>>: Day 24:605. Can Place Flowers
今天要介绍的是我另外一个也经常用的聚合方式,是Metrics底下的Scripted Metric 今...
前言 在上一章节中,笔者讲解了一般使用者的资讯、储存密码还有群组等基本概念,本章节继续延伸上一章节的...
网站+网页绪论 浏览器介绍(推Firefox跟Edge) 上图取自台科大资安社课教材 浏览网页发生的...
昨天我们学完了if、else、else if 的判断,并且学习了布林值的概念。今天我们来学回圈。 正...
此篇为番外,未收入在本篇的原因是 Docker 是个复杂的工具,因此需要更多的篇幅介绍此工具,但是...