selenium自动化发送抖音私信并关注用户

通过界面跑自动化,从视频中的评论区取用户,给抖音用户发送私信并关注用户
一、打开网页并登陆抖音
挑选一个需要使用视频的用户,在该用户的视频评论里面关注其他用户,打开该用户的主页
用户主页访问后,会自动出现登陆的窗口,这里设置了等待时间,用于人工登陆(因为抖音是扫码或者验证码登陆,无法做成自动登陆)

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")#作品数量
if len(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 in range(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 in range(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))
        if len(pep) == 0:
            break
        else:
            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
        if len(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')
        if len(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()

至此,一个完整的流程就出来了。
有几个需要手动的地方,我不知道有没有别的办法避免。
比如:登录、
手动划视频,将视频全部展示、
手动划评论,将评论全部展示
各位宝子们如果有更好的方法可以一起分享~

你可能感兴趣的:(Python自动化,selenium,自动化,python)