让 Selenium 单击 Instagram 关注者按钮会引发错误“找不到元素”

Posted

技术标签:

【中文标题】让 Selenium 单击 Instagram 关注者按钮会引发错误“找不到元素”【英文标题】:Making Selenium click Instagram followers button throws error "can't find element" 【发布时间】:2021-04-27 21:16:13 【问题描述】:

我正在尝试制作一个简单的 C# 程序,它将为我提供我的公开个人资料的关注者列表。我设法让驱动程序连接到提供的 URL,现在我尝试单击“关注者”按钮,但出现异常:

OpenQA.Selenium.NoSuchElementException: 'no such element: Unable to locate element: "method":"css selector","selector":".\-nal3"

我在另一篇 SO 帖子中读到关于在尝试单击元素之前必须等待页面加载但该解决方案对我不起作用 (org.openqa.selenium.ElementClickInterceptedException: element click intercepted error using Selenium and Java in headless mode)。

到目前为止我的代码:

public void Run(string profileName)

    ChromeOptions options = new ChromeOptions();
    options.AddArgument("--headless");
    options.AddArgument("--no-sandbox");
    options.AddArgument("--disable-dev-shm-usage");
    options.AddArgument("start-maximized");
    options.AddArgument("--remote-debugging-port=9222");
    IWebDriver driver = new ChromeDriver(options);

    string url = "http://www.instagram.com/" + profileName + "/";

    driver.Navigate().GoToUrl(url);

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    IWebElement followersButton = wait.Until(driver => driver.FindElement(By.ClassName("-nal3")));

    followersButton.Click();

我也尝试通过 XPath 查找元素,结果相同。

我做错了什么?

更新: 我在我的代码中创建了一个单独的字符串变量,以便轻松调试并查看返回的页面的源代码,然后打开 Visual Studio 的 html Visualizer,它会显示一个页面,其中显示某些活动元素受到限制。如何在我的代码中启用它们?

【问题讨论】:

IG 没有可用于获取此信息的 API 吗? 根据我上次(几个月前)阅读的内容,他们关闭了对公众的 API,只有经过验证和批准的应用程序才能访问它。 旧 API 已关闭,但新 API 仍然有效。当然,您必须创建一个 FB 开发者帐户,并跳过一些障碍,但他们并没有“阻止”您这样做。 @Neil,你能链接到一些教程吗?我在 Google 中看到了数千种不同的结果,但它们似乎主要是一些第三方解决方案。 我会先阅读官方文档developers.facebook.com/docs/instagram-basic-display-api/… 【参考方案1】:

问题是该页面上有 3 个 -nal3 类名称,一个用于 postsfollowersfollowing

试试这个 XPath,把它缩小到followers 链接:

//ul[@class='k9GMp ']/li[2]/a

【讨论】:

不。抛出异常OpenQA.Selenium.NoSuchElementException: 'no such element: Unable to locate element: "method":"xpath","selector":"//ul[@class='k9GMp ']/li[2]/a" 在代码行:IWebElement followersButton = wait.Until(driver => driver.FindElement(By.XPath("//ul[@class='k9GMp ']/li[2]/a"))); 当您尝试查找该元素时,您具体在哪个页面上?您是否已登录并在您的个人资料页面上?我在您的原始帖子中没有看到任何登录代码,所以我不知道。 当我在浏览器中复制班级名称时,我已登录。但我猜想 Selenium 正在运行的 Chrome 实例可能对同一个按钮有不同的类名。让我检查一下。 我看到如果您没有登录,Instagram 确实会显示一个完全不同的页面 - 登录页面。但是我刚刚尝试在该登录页面(关于链接)上找到并单击一个链接,但我仍然遇到同样的问题。我将链接的 XPath 复制到我的代码中,但仍然得到“找不到元素”异常。

以上是关于让 Selenium 单击 Instagram 关注者按钮会引发错误“找不到元素”的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 单击instagram Python上的所有关注按钮

使用 Selenium 和 Python 在 Instagram 通知中单击“现在不”

Python Selenium bot 查看 Instagram 故事 |如何单击具有活跃故事的人的个人资料?

Selenium 中的 Instagram XPath 不起作用? (Python)

如何使用 Selenium 在 Instagram 弹出框中向下滚动

使用 Selenium 和 python 为 Instagram 提供上传文件路径