通过界面跑自动化,从视频中的评论区取用户,给抖音用户发送私信并关注用户
一、打开网页并登陆抖音
挑选一个需要使用视频的用户,在该用户的视频评论里面关注其他用户,打开该用户的主页
用户主页访问后,会自动出现登陆的窗口,这里设置了等待时间,用于人工登陆(因为抖音是扫码或者验证码登陆,无法做成自动登陆)
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.douyin.com/user/MS4wLjA")
driver.maximize_window()
time.sleep(50)#等待50秒,用于人工登录
二、获取主页作品数量,可循环访问该主页的所有作品
因为抖音页面有多种模式,页面的元素样式也不一样,所以我在查找页面元素的时候进行了判断,
判断元素长度是否为0,0就是找不到该元素。则找另一个元素进行操作
找到元素后获取到里面文本信息,从而拿到作品的数量
snu=driver.find_elements(By.CLASS_NAME,"MhR7TL6q")#作品数量iflen(snu)==0:#第一类元素找不到就找第二类
snu=driver.find_element(By.CLASS_NAME,"J6IbfgzH").text
else:
snu=snu[0].text
print(snu)#获得作品数量
三、循环所有作品,点击进入视频详情
先将视频元素取到,然后循环点击进入视频详情(循环的意思是一个视频里面的评论人都关注和私信完了,再操作下一个视频)
我用的主页里面有合集,我不需要,所以我的循环是从3开始的
sli=driver.find_elements(By.CLASS_NAME,"Z6bzLUc0")#视频列表print(len(sli))#输出该元素的数量for i inrange(3,int(snu)):print(i)
sli[i].click()
四、循环所有评论,获取评论人及评论人与作者的关系
要循环评论就得先取得评论的数量,然后循环关注和私信评论人
评论人和关系,先用元素长度判断是否有,再获取对应的内容
取得关系是为了,剔除掉已经关注和互关及作者本人
取得评论人名称是为了,看评论人是否取成功了
time.sleep(5)
pnu= driver.find_element(By.CLASS_NAME,"hfgGrUTS").text#评论数量
driver.find_element(By.CLASS_NAME,"pBxTZJeH").click()#点击打开评论区for j inrange(1,int(pnu)):
time.sleep(10)
pep = driver.find_elements(By.XPATH,value='//*[@id="videoSideBar"]/div[1]/div/div[3]/div[%s]/div/div[2]/div[1]/div[2]/div[1]/div/a/span/span/span/span/span/span'%j)
remark = driver.find_elements(By.XPATH,value='//*[@id="videoSideBar"]/div[1]/div/div[3]/div[%s]/div/div[2]/div[1]/div[2]/div[1]/span/span'%j)print(len(pep))iflen(pep)==0:breakelse:
pep=driver.find_element(By.XPATH,value='//*[@id="videoSideBar"]/div[1]/div/div[3]/div[%s]/div/div[2]/div[1]/div[2]/div[1]/div/a/span/span/span/span/span/span'%j).text
iflen(remark)!=0:
remark = driver.find_element(By.XPATH,value='//*[@id="videoSideBar"]/div[1]/div/div[3]/div[%s]/div/div[2]/div[1]/div[2]/div[1]/span/span'%j).text
else:
remark =""print(j)print(pep)print(remark)if remark =="作者"or remark =="你的关注"or remark =="朋友":continue
五、点击进入评论人的主页,加关注、发私信
点击进入评论人主页后,跳转句柄,切换到新窗口操作。关注并私信用户,最后关闭页面,将句柄切换回来
同样,里面有变化的元素,所以我进行了判断
driver.find_element(By.XPATH,value='//*[@id="videoSideBar"]/div[1]/div/div[3]/div[%s]/div/div[2]/div[1]/div[2]/div[1]/div/a/span/span/span/span/span/span'%j).click()#点击评论人进入主页
new_window=driver.window_handles[-1]#找到新窗口名字
driver.switch_to.window(new_window)#切换到最新打开的窗口
time.sleep(1)
driver.find_element(By.XPATH,"//button[contains(text(),'关注')]").click()
time.sleep(1)
driver.find_element(By.XPATH,"//button[contains(text(),'私信')]").click()
time.sleep(2)
sle = driver.find_elements(By.XPATH,value='//*[@id="douyin-header"]/header/div[2]/div[2]/div/div/div/div[5]/ul[2]/li/div/div/div[3]/div/div[1]/div[3]/div/div/div[1]/div[1]/div/div/div[2]/div/div/div/div')iflen(sle)==0:
driver.find_element(By.XPATH,value='//*[@id="douyin-header"]/div/header/div/div/div[2]/div/div/div/div[5]/ul[2]/li/div/div/div[3]/div/div[1]/div[3]/div/div/div[1]/div[1]/div/div/div[2]/div/div/div/div').send_keys("您好")else:
driver.find_element(By.XPATH,value='//*[@id="douyin-header"]/header/div[2]/div[2]/div/div/div/div[5]/ul[2]/li/div/div/div[3]/div/div[1]/div[3]/div/div/div[1]/div[1]/div/div/div[2]/div/div/div/div').send_keys("您好")
time.sleep(1)
driver.find_element(By.CLASS_NAME,"cW9Hyt2D").click()
time.sleep(2)
driver.close()
driver.switch_to.window(driver.window_handles[0])
六、循环完一个视频后,点击关闭,进入下个视频
driver.find_element(By.CLASS_NAME,"ZCHTRJzJ").click()
至此,一个完整的流程就出来了。
有几个需要手动的地方,我不知道有没有别的办法避免。
比如:登录、
手动划视频,将视频全部展示、
手动划评论,将评论全部展示
各位宝子们如果有更好的方法可以一起分享~
版权归原作者 卑微打工人努力学习 所有, 如有侵权,请联系我们删除。