【问题标题】:Selenium - Cant load following box in InstagramSelenium - 无法在 Instagram 中加载以下框
【发布时间】:2018-11-21 21:15:48
【问题描述】:

我正在使用 Selenium 在 Instagram 页面中查找元素。

我已成功登录并加载了用户个人资料,但无法加载他们的以下框。

当您在浏览器中单击以下链接时,它会加载一个框,您可以滚动查看以下列表。

当使用 selenium 时,我做了以下 -

var opt = new PhantomJSOptions();
        opt.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36");

var driver = new PhantomJSDriver(driverService, opt);

var element = driver.FindElementByName("username");
    element.SendKeys(userName);
    element = driver.FindElementByName("password");
    element.SendKeys(passWord);

    // find the login button and click it after credentials have been populated
    element = driver.FindElement(By.XPath("//button[.='Log in']"));
    element.Click();

    // Now navigate to the users page
    driver.Navigate().GoToUrl("https://www.instagram.com/" + accName);

在这个阶段我已经成功登录,在用户页面上,可以找到以下链接并点击它-

var element = driver.FindElementByPartialLinkText("following");
element.Click();

然而,在点击事件中,这奇怪地把我带回了 Instagram 的主登录页面。

我注意到的另一件事是,如果您在浏览器中并单击链接,浏览器中的 url 会更新为 -

https://www.instagram.com/{username}/following/

但是,如果您复制此链接并将其粘贴到新窗口并尝试导航到它,它不会像我预期的那样自动加载以下框,而只会将您带到用户主页。

我在 python 中找到了人们似乎成功使用点击事件的示例,例如example of using python.

如何使用 C# 实现这一点?我不确定 Instagram 是否已完全阻止此操作。

我不确定它是否重要,但我使用的是稍旧版本的 Selenium Web Driver 3.8.0。我还想到可能使用ChromeDriver 而不是PhantomJS,但不确定这是否会有所不同。

【问题讨论】:

    标签: c# selenium phantomjs instagram


    【解决方案1】:

    我注意到的另一件事是,如果您在浏览器中并单击 链接,浏览器中的 url 更新为 -

    https://www.instagram.com/{username}/following/

    但是,如果您复制 此链接并将其粘贴到新窗口中并尝试导航到它 不会像我预期的那样自动加载以下框,只是 带您进入用户主页。

    如果我没记错的话,这是因为单击此按钮时会发送 POST 请求:

    但是当您在浏览器中通过此 URL 时,会发出 GET 请求,但它缺少一些所需的数据。

    我建议你调试你的问题以检查接下来的事情:

    如果您在点击链接之前设置了一个刹车点,会发生什么?如果它运行良好,那么您需要等待页面/脚本加载。如何做到这一点有很多细微差别。您可以在这里寻求帮助:Wait for page load in Selenium

    您提供的 Python 代码链接包含不难转换为 C# 的简单代码,但作者没有在那里描述您的问题。您现在的问题是您无法调用所需的弹出窗口,因此请继续努力。

    Thread.Sleep() 不是首选方法,但如果有帮助,您可以使用它进行调试。如果它有帮助并且您不想深入研究如何等待页面/脚本加载,您可以保持原样。

    【讨论】:

      【解决方案2】:

      很遗憾,我没有 Instagram 帐户,无法完全为您试用,但鉴于您的行为好像您没有登录,我的假设是您等待服务器的时间不够长在单击“登录”按钮和导航到用户页面之间返回身份验证成功。

      我建议在单击“登录”按钮后添加Thread.Sleep(5000) 作为初步调查,等待 5 秒以等待登录过程完成并查看是否有效 - 如果有效,我建议您然后替换它线程睡眠改为等待页面上存在的元素,您在成功登录后被重定向到该元素。这样,在导航到用户页面之前,您总是在等待登录过程完成,然后行为应该符合预期

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-29
        • 1970-01-01
        • 2020-08-26
        相关资源
        最近更新 更多