已回答 Selenium Instagram扫描仪(不完整)

马里亚诺07

新成员
已加入
2020年5月9日
留言内容
3
编程经验
Beginner
大家好,我很长时间以来一直在尝试将其作为我的第一个C#。

我正在为元素选择而苦苦挣扎,因为我想让扫描仪向下滚动"news feed"并从我追随的人那里获得名字和位置。
有没有办法逐个图片向下滚动呢?

我不知道我在想什么。

让我知道您是否可以帮助很多人。
具有Selenium C#的Instagram扫描器:
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
//To hold the list of the elements so we get all the links


namespace SeleniumTest
{
    public class Tests
    {
        string test_url = "//www.instagram.com";
        IWebElement ScrollElement;
        IWebElement name;
        IWebElement location;

        public IWebDriver driver;

        [SetUp]
        public void Setup()
        {
        
            driver = new ChromeDriver();
            driver.Manage().Window.Maximize();

        }

        [Test]
        public void Test1()
        {
            string LoggedIn = LoginAndRemovePopUp("scannerJackson", "scanner2021");
            Console.WriteLine(LoggedIn);
      
            System.Threading.Thread.Sleep(5000);

            GetNameAndLocation();

        }

        public string LoginAndRemovePopUp(string username, string password)
        {
            driver.Url = test_url;

            System.Threading.Thread.Sleep(2000);
            
            //LOGGING IN
            IWebElement userNameField = driver.FindElement(By.Name("username"));
            IWebElement passWordField = driver.FindElement(By.Name("password"));

            userNameField.SendKeys(username);
            passWordField.SendKeys(password);

            IWebElement loginButton = driver.FindElement(By.XPath("/html/body/div[1]/section/main/article/div[2]/div[1]/div/form/div[4]/button"));

            loginButton.Click();

            System.Threading.Thread.Sleep(5000);

            //Remove popup window
            IWebElement popUpWindow = driver.FindElement(By.XPath("/html/body/div[4]/div/div/div[3]/button[2]"));
            popUpWindow.Click();

            return "Logged in";
        }

        public void ScrollTo()
        {
            //Scroll to a position on screen
            IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
            //js.ExecuteScript("window.scrollBy(1,1100)");
            //ScrollTo an element
            ScrollElement = driver.FindElement(By.XPath("/html/body/div[1]/section/main/section/div/div[2]/div/article[1]/header"));
            js.ExecuteScript("arguments[0].scrollIntoView(true);", ScrollElement);
        }

        public void GetNameAndLocation()
        {
            
            IWebElement head = driver.FindElement(By.XPath("/html/body/div[1]/section/main/section/div/div[2]/div/article[1]/header/div[2]"));
                //foreach (IWebElement names in head)
                for(int i = 0; i<10; i++)
                {
                    
                    name = driver.FindElement(By.ClassName("e1e1d"));
                    location = driver.FindElement(By.ClassName("JF9hh"));
                    //head = driver.FindElement(By.XPath("/html/body/div[1]/section/main/section/div/div[2]/div/article[1]/header/div[2]"));
                    Console.WriteLine(name.Text);
                    Console.WriteLine(location.Text);
                    ScrollTo();
                }

        }

        
    }
}
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,463
位置
弗吉尼亚州切萨皮克
编程经验
10+
So you have code on lines 82-91 to loop and try scrolling to a particular item, but I'm not seeing in your ScrottTo() method how you are actually scrolling to the next item or a particular item by index. Any which way, this looks like a JavaScript problem rather than a C# question -- you just happen to be using C# to do some JavaScript operations.

顺便说一句,您的测试脚本必须登录并退出登录屏幕时,会感到有些不对劲。感觉更像是您在使用测试脚本来抓取网页而不是测试应用程序。测试应用程序应具有直接转到屏幕的挂钩,以测试并绕过登录。不过,这只是我的意见,自从我不得不进行与集成测试有关的工作以来,过去两年中,使用Selenium的集成测试方法可能已经发生了变化。
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,899
位置
英国
编程经验
10+
Instagram有一个API。我建议使用它。

我同意跳伞运动员。您还应该注意,Instagram似乎已经开发出检测其网站何时被访问的方法"scraped"内容。并且始终禁止检测到任何这样做的用户帐户/程序。您可以自己研究。如果您重视自己的Instagram帐户或应用程序用户的Instagram帐户,建议不要抓取它们。
 

马里亚诺07

新成员
已加入
2020年5月9日
留言内容
3
编程经验
Beginner
So you have code on lines 82-91 to loop and try scrolling to a particular item, but I'm not seeing in your ScrottTo() method how you are actually scrolling to the next item or a particular item by index. Any which way, this looks like a JavaScript problem rather than a C# question -- you just happen to be using C# to do some JavaScript operations.

顺便说一句,您的测试脚本必须登录并退出登录屏幕时,会感到有些不对劲。感觉更像是您在使用测试脚本来抓取网页而不是测试应用程序。测试应用程序应具有直接转到屏幕的挂钩,以测试并绕过登录。不过,这只是我的意见,自从我不得不进行与集成测试有关的工作以来,过去两年中,使用Selenium的集成测试方法可能已经发生了变化。

基本上我对js不太熟悉,所以我尝试使用c#尚未编码12年了,所以特别是对这些东西特别生锈

我只是不知道这是否有可能我应该放弃还是我真的想要它应该使用js代替?

您的建议是什么?

@谢平 我仅将此帐户用于此代码,因此有关如何绕过登录的任何提示?
 
最佳 底部