6332195 发表于 2023-4-10 11:16

抖音场控思路

想了好久还是发下吧,有很多人找我做个抖音场控,自己做完了,然后朋友拿出去代{过}{滤}理卖了,现在分享下思路。
因为是个java程序员,所以拿得java开发的。
目前场控有几种思路:
1、是PC端调用js,获取粉丝发言和礼物信息等。然后模拟用户发言。
2、是PC端直接以流的形式进行解密读取然后直接把要发言的内容加密发送。
3、是移动端autojs,没研究。
4、是移动端hook,直接调用方法,研究了,没找到具体类和方法名。(如有朋友找到了,方便的话提供给我,我继续研究,感谢)
正文:本人采用的是第一种方法,原因很简单,就是简单。
思路,首先用java创建了一个Application,然后用swing画了个样式。如下图,有些场控的设置。

界面很丑,但是功能实现了。swing部分代码如下,不是不分享,是代码太多了,展示部分代码。
class FrameInOut extends JFrame implements ActionListener
{
        JButton btn1,btn2,btn3;
        static JTextArea ta1,ta2;
        JTextField jtf_urlts,jtf_url,jtf2,jtf08;
        JPanel p1,p2,p3;
        ImageIcon background;
        JPanel imagePanel;
        JComboBox comboBox01,comboBox02,comboBox03,comboBox04,comboBox05,comboBox07,comboBox08,comboBox09,comboBox11,comboBox12,comboBox13,comboBox14,comboBox15,comboBox16;
        boolean dk = false;
       
        FrameInOut()
        {
                super(Tools.title);
                background = new ImageIcon("image/background.jpeg");//背景图片
          JLabel label = new JLabel(background);//把背景图片显示在一个标签里面
          label.setBounds(0,0,background.getIconWidth(),background.getIconHeight());
          //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明               
      imagePanel = (JPanel)this.getContentPane();
      imagePanel.setOpaque(false);
      imagePanel.setLayout(new FlowLayout());
      this.getLayeredPane().setLayout(null);
      //把背景图片添加到分层窗格的最底层作为背景               
      this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
                this.setFont(new Font("隶体",Font.BOLD,100));
                this.setBackground(Color.blue);
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
                /*初始化各个按钮*/
                JLabel jl1 = new JLabel("填写使用编号后点击登录");
      jl1.setHorizontalAlignment(SwingConstants.RIGHT);
      
                jtf_urlts = new JTextField();
                jtf_urlts.setText("填写使用编号后点击登录");
                jtf_urlts.setEditable(false);
                jtf_urlts.setFont(new Font("隶体",Font.BOLD,20));
                jtf_url = new JTextField(20);
                jtf_url.setText("");
                Map infoMap = InfoTools.getInfo();
                if (infoMap.containsKey("zbj")) {
                        String zbj = (String) infoMap.get("zbj");
                        if (zbj.trim().length() > 0) {
                                jtf_url.setText(zbj.trim());
                        }
                }
                jtf_url.setFont(new Font("隶体",Font.BOLD,20));
               
                btn1=new JButton("应用");
                btn2=new JButton("打开直播间");
                btn3=new JButton("登录");
                btn1.setEnabled(false);
                btn2.setEnabled(false);
                /*初始化文本域*/
                /*初始化文本域的大小,行列数*/
                ta1=new JTextArea(17,40);
                ta2=new JTextArea(17,40);
                /*初始化面板,将个空间加入容器*/
               
                p1=new JPanel();
                p2=new JPanel(new GridLayout(7, 4,20,10));//4行4列 水平间距20 垂直间距10
                p3=new JPanel();
                p1.add(jl1);
                p1.add(jtf_url);
                p1.add(btn3);
                p1.add(btn1);
                p1.add(btn2);
               
                //文字感谢总控
      JLabel jl01 = new JLabel("文字感谢总控:");
      jl01.setFont(new Font("隶体",Font.BOLD,20));
      jl01.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox01=new JComboBox();//创建一个新的下拉框对象
      comboBox01.addItem("开");//给下拉框对象添加条目元素
      comboBox01.addItem("关");
      comboBox01.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl01);
      p2.add(comboBox01);
      
      //语音感谢总控
      JLabel jl09 = new JLabel("语音感谢总控:");
      jl09.setFont(new Font("隶体",Font.BOLD,20));
      jl09.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox09=new JComboBox();//创建一个新的下拉框对象
      comboBox09.addItem("开");//给下拉框对象添加条目元素
      comboBox09.addItem("关");
      comboBox09.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl09);
      p2.add(comboBox09);
      
           
      
      
      //升级感谢开关
      JLabel jl03 = new JLabel("升级感谢开关:");
      jl03.setFont(new Font("隶体",Font.BOLD,20));
      jl03.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox03=new JComboBox();//创建一个新的下拉框对象
      comboBox03.addItem("开");//给下拉框对象添加条目元素
      comboBox03.addItem("关");
      comboBox03.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl03);
      p2.add(comboBox03);
      
            //礼物感谢开关
      JLabel jl04 = new JLabel("礼物感谢开关:");
      jl04.setFont(new Font("隶体",Font.BOLD,20));
      jl04.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox04=new JComboBox();//创建一个新的下拉框对象
      comboBox04.addItem("开");//给下拉框对象添加条目元素
      comboBox04.addItem("关");
      comboBox04.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl04);
      p2.add(comboBox04);
      
      //欢迎感谢开关
      JLabel jl05 = new JLabel("欢迎感谢开关:");
      jl05.setFont(new Font("隶体",Font.BOLD,20));
      jl05.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox05=new JComboBox();//创建一个新的下拉框对象
      comboBox05.addItem("开");//给下拉框对象添加条目元素
      comboBox05.addItem("关");
      comboBox05.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl05);
      p2.add(comboBox05);
      
      //文字发言延时
      JLabel jl02 = new JLabel("文字发言延时:");
      jl02.setFont(new Font("隶体",Font.BOLD,20));
      jl02.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox02=new JComboBox();//创建一个新的下拉框对象
      comboBox02.addItem("2秒");
      comboBox02.addItem("3秒");
      comboBox02.addItem("4秒");
      comboBox02.addItem("5秒");
      comboBox02.addItem("6秒");
      comboBox02.addItem("7秒");
      comboBox02.addItem("8秒");
      comboBox02.addItem("9秒");
      comboBox02.setSelectedItem("4秒");
      comboBox02.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl02);
      p2.add(comboBox02);
      
            //定时发言开关
      //JLabel jl06 = new JLabel("定时发言开关:");
      //jl06.setFont(new Font("隶体",Font.BOLD,20));
      //jl06.setHorizontalAlignment(SwingConstants.RIGHT);
      //comboBox06=new JComboBox();//创建一个新的下拉框对象
      //comboBox06.addItem("开");//给下拉框对象添加条目元素
      //comboBox06.addItem("关");
      //comboBox06.setFont(new Font("隶体",Font.BOLD,20));
      // p2.add(jl06);
      //p2.add(comboBox06);
      
      //定时发言延时
      JLabel jl07 = new JLabel("定时发言延时:");
      jl07.setFont(new Font("隶体",Font.BOLD,20));
      jl07.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox07=new JComboBox();//创建一个新的下拉框对象
      comboBox07.addItem("30秒");//给下拉框对象添加条目元素
      comboBox07.addItem("60秒");
      comboBox07.addItem("120秒");
      comboBox07.addItem("180秒");
      comboBox07.addItem("240秒");
      comboBox07.addItem("300秒");
      comboBox07.setSelectedItem("60秒");
      comboBox07.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl07);
      p2.add(comboBox07);
      
      //定时发言内容
      JLabel jl08 = new JLabel("幸运惊喜开关:");
      jl08.setFont(new Font("隶体",Font.BOLD,20));
      jl08.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox08 = new JComboBox();//创建一个新的下拉框对象
      comboBox08.addItem("关");
      comboBox08.addItem("开");//给下拉框对象添加条目元素
      comboBox08.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl08);
      p2.add(comboBox08);
      
      
      
      
      //语音后缀开关
      //JLabel jl10 = new JLabel("语音后缀开关:");
      //jl10.setFont(new Font("隶体",Font.BOLD,20));
      //jl10.setHorizontalAlignment(SwingConstants.RIGHT);
      //comboBox10=new JComboBox();//创建一个新的下拉框对象
      //comboBox10.addItem("开");//给下拉框对象添加条目元素
      //comboBox10.addItem("关");
      //comboBox10.setFont(new Font("隶体",Font.BOLD,20));
      //p2.add(jl10);
      //p2.add(comboBox10);
               
      //语音礼物开关
      JLabel jl11 = new JLabel("语音礼物开关:");
      jl11.setFont(new Font("隶体",Font.BOLD,20));
      jl11.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox11=new JComboBox();//创建一个新的下拉框对象
      comboBox11.addItem("开");//给下拉框对象添加条目元素
      comboBox11.addItem("关");
      comboBox11.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl11);
      p2.add(comboBox11);
      
      //发音人物选择
      JLabel jl12 = new JLabel("发音人物选择:");
      jl12.setFont(new Font("隶体",Font.BOLD,20));
      jl12.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox12=new JComboBox();//创建一个新的下拉框对象
      comboBox12.addItem("小燕(离线女生)");//给下拉框对象添加条目元素
      comboBox12.addItem("小峰(离线男生)");
      comboBox12.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl12);
      p2.add(comboBox12);
      
      
      //语音延时
      JLabel jl13 = new JLabel("语音发言延时:");
      jl13.setFont(new Font("隶体",Font.BOLD,20));
      jl13.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox13=new JComboBox();//创建一个新的下拉框对象
      comboBox13.addItem("4秒");//给下拉框对象添加条目元素
      comboBox13.addItem("6秒");
      comboBox13.addItem("8秒");
      comboBox13.addItem("10秒");
      comboBox13.addItem("12秒");
      comboBox13.addItem("14秒");
      comboBox13.addItem("16秒");
      comboBox13.setSelectedItem("10秒");
      comboBox13.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl13);
      p2.add(comboBox13);
      
      //发音语速
      JLabel jl14 = new JLabel("语音发音语速:");
      jl14.setFont(new Font("隶体",Font.BOLD,20));
      jl14.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox14=new JComboBox();//创建一个新的下拉框对象
      comboBox14.addItem("10");//给下拉框对象添加条目元素
      comboBox14.addItem("20");
      comboBox14.addItem("30");
      comboBox14.addItem("40");
      comboBox14.addItem("50");
      comboBox14.addItem("60");
      comboBox14.addItem("70");
      comboBox14.addItem("80");
      comboBox14.addItem("90");
      comboBox14.addItem("100");
      comboBox14.setSelectedItem("50");
      comboBox14.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl14);
      p2.add(comboBox14);
      
      //发音语调
      JLabel jl15 = new JLabel("语音发音语调:");
      jl15.setFont(new Font("隶体",Font.BOLD,20));
      jl15.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox15=new JComboBox();//创建一个新的下拉框对象
      comboBox15.addItem("10");//给下拉框对象添加条目元素
      comboBox15.addItem("20");
      comboBox15.addItem("30");
      comboBox15.addItem("40");
      comboBox15.addItem("50");
      comboBox15.addItem("60");
      comboBox15.addItem("70");
      comboBox15.addItem("80");
      comboBox15.addItem("90");
      comboBox15.addItem("100");
      comboBox15.setSelectedItem("50");
      comboBox15.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl15);
      p2.add(comboBox15);
      
      //发音音量
      JLabel jl16 = new JLabel("语音发音音量:");
      jl16.setFont(new Font("隶体",Font.BOLD,20));
      jl16.setHorizontalAlignment(SwingConstants.RIGHT);
      comboBox16=new JComboBox();//创建一个新的下拉框对象
      comboBox16.addItem("10");//给下拉框对象添加条目元素
      comboBox16.addItem("20");
      comboBox16.addItem("30");
      comboBox16.addItem("40");
      comboBox16.addItem("50");
      comboBox16.addItem("60");
      comboBox16.addItem("70");
      comboBox16.addItem("80");
      comboBox16.addItem("90");
      comboBox16.addItem("100");
      comboBox16.setSelectedItem("50");
      comboBox16.setFont(new Font("隶体",Font.BOLD,20));
      p2.add(jl16);
      p2.add(comboBox16);
      
      
                p3.add(ta1);
                p3.add(ta2);
                add(p1);
                add(p2);
                add(p3);
                setLayout(new FlowLayout());//流式布局
                /*设置面板背景色*/
                p1.setBackground(Color.LIGHT_GRAY);
                /*各个按钮注册事件监听器*/
                btn1.addActionListener(this);
                btn2.addActionListener(this);
                btn3.addActionListener(this);
                setSize(1024,768);//设置界面尺寸
                setVisible(true);
        }
然后因为朋友想做成商业版的,所以很多设置在服务端,展示下服务端功能。

因为是管理员截图所以功能比普通用户多些。
然后最初的想法是调用个浏览器,然后控制,发现行不通,然后开始内建个浏览器,采用的是jxbrowser,然后用了两个版本,之前用的是6.24.3,现在主要用7.19,这个自行在网上所搜吧。
然后就是用浏览器打开直播地址。
JFrame frame = new JFrame(Tools.title);
                //RenderingMode ss = com.teamdev.jxbrowser.engine.RenderingMode.HARDWARE_ACCELERATED;
                // 谷歌内核浏览器
                //Engine engine = Engine.newInstance(
                //      EngineOptions.newBuilder(ss).build());
                JInternalFrame jf = new JInternalFrame();
                Tools.browser = Browser.internalBrowser(frame,jf,Tools.url);
                BrowserView view = BrowserView.newInstance(Tools.browser);
                //禁用close功能
//                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                //隐藏任务栏图标
//                frame.setType(JFrame.Type.UTILITY);
//                //不显示标题栏,最大化,最小化,退出按钮
                frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                frame.add(view, BorderLayout.CENTER);
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
然后用户登陆后,通过js监听直播间内的粉丝发言和礼物,找到class标签是"webcast-chatroom___item";
divs = Tools.getElementsByClassName(Tools.browser, Tools.ltkbs);

public static List<Element> t5 = null;
        public static List<Element> getElementsByClassName(Browser browser,String className)
        {
                browser.mainFrame().flatMap(Frame::document).ifPresent(document -> {
            t5 = document.findElementsByClassName(className);
            });
            return t5;
        }
       
然后就是发言环节。直接代码。
String js = "document.querySelector('textarea').focus();document.execCommand('selectAll', false, null);document.execCommand('insertText', false, '" + fynr + "');";
                      Tools.executeJavaScript(Tools.browser, js);
                      //Tools.browser.executeJavaScript(js);
                      String js_oc = "document.getElementsByClassName('" + Tools.fskbs + "').click();";
                      Tools.executeJavaScript(Tools.browser, js_oc);
排版实在没时间,如果有兴趣的可以一起研究。

6332195 发表于 2023-4-10 11:18

最后执行js的时候封装了个方法,然后给大家补上
public static void executeJavaScript(Browser browser,String javaScript)
        {
                browser.mainFrame().get().executeJavaScript(javaScript);
        }

18076635521 发表于 2023-5-4 10:29

需要需要,可付费,有没有自己批量添加话术,然后随机发送一条,场控的号也是自己的?还是软件本身自带的

楚狂客 发表于 2023-4-10 11:22

想找此类软件,可都是收费的,先观摩下

yangpipia 发表于 2023-4-10 11:53

有没有免费的啊

Isabellaa 发表于 2023-4-10 12:31

感谢感谢分享

anderawYang 发表于 2023-4-10 12:48

晚上下班回家试试

myhzqa 发表于 2023-4-10 13:48

膜拜大佬,这个有现成的app嘛 考虑入手个

wzz2690 发表于 2023-4-10 14:17

都是收费的,要是有免费的就更好了

Galaxyou 发表于 2023-4-10 15:34

考不考虑开源啊大佬

huxian2020 发表于 2023-4-10 15:43

你這個不會只是畫了一個界面吧,代碼裡面看不到協議接口啊
页: [1] 2 3
查看完整版本: 抖音场控思路