使用 js 以编程方式发布 Instagram 评论

Kod*_* R. 5 javascript instagram

我正在创建一个 Instagram 机器人,可以对用户的照片发表评论。我知道已经有像InstaPy这样的解决方案,但它对我不起作用,而且我自己的 js 解决方案已完成 99%。

有没有办法让我以编程方式发布?我已经设置了 textArea.value 并尝试提交包装表单(它只是刷新页面)。我还尝试“单击”提交按钮,但这并没有导致它执行任何操作。我还尝试在文本区域中“输入”,但如果屏幕上没有任何实际的用户交互以及尝试提交实际的请求,这似乎是不可能的(似乎我的标题不匹配,我得到了一个403 错误。)下面是我当前正在做的代码片段。

var commentTextArea = document.getElementsByClassName('Ypffh')[0];
if (commentTextArea) {

    // Text area for posting comment
    commentTextArea.textContent = "This is my comment :)";

    setTimeout(function() {

        // Comment submit button
        var submitButton = document.getElementsByClassName('LCjcc')[0];
        submitButton.disabled = false;
        submitButton.click(); // doesn't fire anything. I can see in chrome dev tools there is no event event attached to this even when enabled which is odd

        // Comment form
        // Submitting form expectedly refreshes page
        // Tried add my own submit listener with return false && e.preventDefault and neither worked
        var form = document.querySelector('X7cDz');
        if (form) {

            form.submit();
        }
    }, 2000);
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*ell 1

由于您未提交 csrf 令牌,因此出现 403 错误。您可以在这里阅读更多内容

为了克服这一挑战,您可以使用提供高级 API 的库来控制浏览器,例如Puppeteer。这允许您编写一个脚本来运行浏览器,并像真正的用户一样,浏览页面并在任何您想要的地方留下评论。

以下是登录 Instagram 并在特定帖子下留下评论的代码示例:

const puppeteer = require('puppeteer');

(async () => {
  // Starting browser
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();

  // Login flow
  await page.goto('https://www.instagram.com/accounts/login/?source=auth_switcher');
  await page.waitForSelector('input[name="username"]');
  await page.type('input[name="username"]', 'username');
  await page.type('input[name="password"]', 'password');
  await page.click('button[type="submit"]');

  // Waiting for page to refresh
  await page.waitForNavigation();

  // Navigate to post and submitting the comment
  await page.goto('https://www.instagram.com/p/BVSCQI-FRaj/');
  await page.waitForSelector('textarea');
  await page.type('textarea', 'Test comment');

  await page.click('button[type="submit"]');

  await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)