
严正声明:本博文所讨论的技术仅用于研究学习,任何个人、团体、组织不得用于非法目的,违法犯罪必将受到法律的严厉制裁。

可能有些读者会有疑问,为什么要这么麻烦,直接对 API 接口下手不是更快更方便吗?
emm,如果是以超高频率去请求的话,轻则 IP 被关入小黑屋,重则抖音号被永久封禁,但是自己又不知道需要将速度控制在多少以内,因此,以这种模拟点击的方式去实现取关反而效果更好。
这个自动化脚本的背景大概就是,有一位粉丝对于抖音现在推荐给他的视频不太满意,因此他想清空一下关注列表,以此来重塑一下他抖音的个性化推荐算法,因此,用了 Selenium IDE 完成了这次的需求。

接下来,博主将详细讲解这一实现过程。
首先,需要来到个人主页,点击 “我的”,然后再点击关注,就会弹出关注列表:

转换成 Selenium IDE 指令则需要两个步骤即可:
1、由于 https://www.douyin.com/user/self?showTab=like 能够直接到达个人主页的 “我的”,因此直接使用 open 指令:
Command | Target |
|---|---|
|
2、点击 关注 以实现关注列表的弹出,定位器可以通过 id、css 和 xpath 等方式来实现:
Command | Target |
|---|---|
|
|
Selenium IDE 指令界面:

接下来就是取关操作,只要点击红框中的按钮即可:

因此转换成 Selenium IDE 指令只需要一个步骤:
Command | Target |
|---|---|
|
|
Selenium IDE 指令界面:

由于上述内容是取关一个博主,当我们要进行批量取关时,就需要用到循环了。
这里的话,用的是 times,因为关注个数是可知的,当然也能直接获取这个元素的值,不过考虑到不要短时间内过于频繁的请求,因此就设定了一定的循坏次数:

需要注意的是,取关 click 的 css 值也要跟着改变,因为之前的值是固定,现在要将 1 -> i,即 css=.vcEWxPjN:nth-child(${i}) .B10aL8VQ > .cNFB52sk。
以下是循环执行了一次的运行结果:

转换成 Python 代码如下所示:
from selenium import webdriver
from selenium.webdriver.common.by import By
class Test():
def setup_method(self, method):
self.driver = webdriver.Chrome()
self.vars = {}
def teardown_method(self, method):
self.driver.quit()
def test_(self):
self.driver.get("https://www.douyin.com/user/self?showTab=like")
self.driver.find_element(By.CSS_SELECTOR, ".AULCPX_8:nth-child(1) > .TxoC9G6_").click()
self.vars["i"] = self.driver.execute_script("return 1")
for cnt in range(0, 50):
self.driver.find_element(By.CSS_SELECTOR, '.vcEWxPjN:nth-child(self.vars["i"]) .B10aL8VQ > .cNFB52sk').click()
self.vars["i"] = self.driver.execute_script("return arguments[0] + 3", self.vars["i"])在实际场景中,要清空抖音关注列表,需要用户自己手动一个一个取关,这样子又累又低效,而去刷 API 接口又不太友善且会被封号,因此使用 Selenium IDE 来模仿人的操作,以相近的频率来实现自动取关。
1、展示最终结果;
2、交代需求背景;
3、实现 demo:完成单次取关操作;
4、优化 demo:实现循环取关操作;
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。