Не компилируется сниппет C#

ssernik272

Новичок
Регистрация
30.04.2023
Сообщения
6
Благодарностей
0
Баллы
1
Мне нужно было написать сниппет, который бы проходился по ссылкам на темы с форума, которые хранятся в списке и собирал оттуда информацию об ее авторе. Получилось что то такое:

C#:
public class ScrapeAuthor
{
    public void Execute()
    {
        List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Values);

        foreach (string threadUrl in threadURLs)
        {
            ZennoPoster.Navigate(threadUrl, true);

            User author = new User
            {
                Nickname = ZennoPoster.HtmlGetElementByXpath("//a[contains(@class, 'username')]").InnerText,
                Rank = ZennoPoster.HtmlGetElementByXpath("//div[contains(@class, 'userBanner')]/strong").InnerText,
                PostCount = int.Parse(ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd").InnerText),
                Gender = ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd").InnerText
            };

            SaveAuthorToFile(author);
        }
    }

    public void SaveAuthorToFile(User author)
    {
        string authorInfo = $"Nickname: {author.Nickname}\n" +
                            $"Rank: {author.Rank}\n" +
                            $"PostCount: {author.PostCount}\n" +
                            $"Gender: {author.Gender}";

        
        string fileName = $"author_info_{author.Nickname}.txt";
        File.WriteAllText(fileName, authorInfo);
    }
}

public class User
{
    public string Nickname { get; set; }
    public string Rank { get; set; }
    public int PostCount { get; set; }
    public string Gender { get; set; }   
}


ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
Но при запуске кубика с данным кодом в логах возникают ошибки:
12:17:13 Компиляция кода Ошибка в действии "CS1513" "} expected". [Строка: 0; Cтолбец: 2]
12:17:13 Компиляция кода Ошибка в действии "CS1519" "Invalid token '(' in class, struct, or interface member declaration". [Строка: 46; Cтолбец: 16]
12:17:13 Компиляция кода Ошибка в действии "CS8124" "Tuple must contain at least two elements.". [Строка: 46; Cтолбец: 17]
12:17:13 Компиляция кода Ошибка в действии "CS1519" "Invalid token ';' in class, struct, or interface member declaration". [Строка: 46; Cтолбец: 18]
12:17:13 Компиляция кода Ошибка в действии "CS1022" "Type or namespace definition, or end-of-file expected". [Строка: 45; Cтолбец: 1]

Помогите, пожалуйста, понять в чем причина. XPath для поиска значений вроде верные указал, да и даже если бы и нет, насколько я понимаю, код все равно должен был выполниться, просто в случае неверных xpath ничего не нашел бы.
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 444
Благодарностей
1 287
Баллы
113
Мне нужно было написать сниппет, который бы проходился по ссылкам на темы с форума, которые хранятся в списке и собирал оттуда информацию об ее авторе. Получилось что то такое:

C#:
public class ScrapeAuthor
{
    public void Execute()
    {
        List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Values);

        foreach (string threadUrl in threadURLs)
        {
            ZennoPoster.Navigate(threadUrl, true);

            User author = new User
            {
                Nickname = ZennoPoster.HtmlGetElementByXpath("//a[contains(@class, 'username')]").InnerText,
                Rank = ZennoPoster.HtmlGetElementByXpath("//div[contains(@class, 'userBanner')]/strong").InnerText,
                PostCount = int.Parse(ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd").InnerText),
                Gender = ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd").InnerText
            };

            SaveAuthorToFile(author);
        }
    }

    public void SaveAuthorToFile(User author)
    {
        string authorInfo = $"Nickname: {author.Nickname}\n" +
                            $"Rank: {author.Rank}\n" +
                            $"PostCount: {author.PostCount}\n" +
                            $"Gender: {author.Gender}";

    
        string fileName = $"author_info_{author.Nickname}.txt";
        File.WriteAllText(fileName, authorInfo);
    }
}

public class User
{
    public string Nickname { get; set; }
    public string Rank { get; set; }
    public int PostCount { get; set; }
    public string Gender { get; set; }
}


ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
Но при запуске кубика с данным кодом в логах возникают ошибки:
12:17:13 Компиляция кода Ошибка в действии "CS1513" "} expected". [Строка: 0; Cтолбец: 2]
12:17:13 Компиляция кода Ошибка в действии "CS1519" "Invalid token '(' in class, struct, or interface member declaration". [Строка: 46; Cтолбец: 16]
12:17:13 Компиляция кода Ошибка в действии "CS8124" "Tuple must contain at least two elements.". [Строка: 46; Cтолбец: 17]
12:17:13 Компиляция кода Ошибка в действии "CS1519" "Invalid token ';' in class, struct, or interface member declaration". [Строка: 46; Cтолбец: 18]
12:17:13 Компиляция кода Ошибка в действии "CS1022" "Type or namespace definition, or end-of-file expected". [Строка: 45; Cтолбец: 1]

Помогите, пожалуйста, понять в чем причина. XPath для поиска значений вроде верные указал, да и даже если бы и нет, насколько я понимаю, код все равно должен был выполниться, просто в случае неверных xpath ничего не нашел бы.
Пробуйте chatgpt

C#:
// using System.IO;
// using System.Collections.Generic;

public class ScrapeAuthor
{
    public void Execute()
    {
        List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Values);

        foreach (string threadUrl in threadURLs)
        {
            ZennoPoster.Navigate(threadUrl, true);

            User author = new User
            {
                Nickname = ZennoPoster.HtmlGetElementByXpath("//a[contains(@class, 'username')]").InnerText,
                Rank = ZennoPoster.HtmlGetElementByXpath("//div[contains(@class, 'userBanner')]/strong").InnerText,
                PostCount = int.Parse(ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd").InnerText),
                Gender = ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd").InnerText
            };

            SaveAuthorToFile(author);
        }
    }

    public void SaveAuthorToFile(User author)
    {
        string authorInfo = $"Nickname: {author.Nickname}\n" +
                            $"Rank: {author.Rank}\n" +
                            $"PostCount: {author.PostCount}\n" +
                            $"Gender: {author.Gender}";

        string fileName = $"author_info_{author.Nickname}.txt";
        File.WriteAllText(fileName, authorInfo);
    }
}

public class User
{
    public string Nickname { get; set; }
    public string Rank { get; set; }
    public int PostCount { get; set; }
    public string Gender { get; set; }
}

ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
 

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
854
Благодарностей
246
Баллы
43
Перенеси этот код в общий код, а в кубике вызывай:

ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
 

ssernik272

Новичок
Регистрация
30.04.2023
Сообщения
6
Благодарностей
0
Баллы
1
Пробуйте chatgpt

C#:
// using System.IO;
// using System.Collections.Generic;

public class ScrapeAuthor
{
    public void Execute()
    {
        List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Values);

        foreach (string threadUrl in threadURLs)
        {
            ZennoPoster.Navigate(threadUrl, true);

            User author = new User
            {
                Nickname = ZennoPoster.HtmlGetElementByXpath("//a[contains(@class, 'username')]").InnerText,
                Rank = ZennoPoster.HtmlGetElementByXpath("//div[contains(@class, 'userBanner')]/strong").InnerText,
                PostCount = int.Parse(ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd").InnerText),
                Gender = ZennoPoster.HtmlGetElementByXpath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd").InnerText
            };

            SaveAuthorToFile(author);
        }
    }

    public void SaveAuthorToFile(User author)
    {
        string authorInfo = $"Nickname: {author.Nickname}\n" +
                            $"Rank: {author.Rank}\n" +
                            $"PostCount: {author.PostCount}\n" +
                            $"Gender: {author.Gender}";

        string fileName = $"author_info_{author.Nickname}.txt";
        File.WriteAllText(fileName, authorInfo);
    }
}

public class User
{
    public string Nickname { get; set; }
    public string Rank { get; set; }
    public int PostCount { get; set; }
    public string Gender { get; set; }
}

ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
Код, который я привел выше, и так написан с помощью ChatGPT. Но иногда бывают такие ситуации, когда что то не работает в коде и ты спрашиваешь у него "Как исправить?", показываешь код и говоришь какие ошибки возникают, он что то там исправляет, говорит что все должно работать ок, но тем не менее все равно не работает. И так по кругу, он каждый раз что то исправляет, но это не приводит к нужному результату. У меня сейчас как раз тот случай.
 

ssernik272

Новичок
Регистрация
30.04.2023
Сообщения
6
Благодарностей
0
Баллы
1
Перенеси этот код в общий код, а в кубике вызывай:

ScrapeAuthor scraper = new ScrapeAuthor();
scraper.Execute();
Попробовал, но все равно не работает( Пробовал с помощью ChatGPT устранить ошибки, но максимум чего добился, это сокращение кол-ва ошибок с 8 до 4. Может быть тут кому то удастся помочь устранить ошибки)

Мой общий код:

C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;

namespace ZennoLab.OwnCode
{
    public class CommonCode
    {
        public static object SyncObject = new object();

        public class ScrapeAuthor
        {
            private IZennoPosterProjectModel Project { get; }
            private Instance ActiveInstance { get; }

            public ScrapeAuthor(IZennoPosterProjectModel project, Instance instance)
            {
                Project = project;
                ActiveInstance = instance;
            }

            public void Execute()
            {
                List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Value.ToList());

                foreach (string threadUrl in threadURLs)
                {
                    ActiveInstance.ActiveTab.Navigate(threadUrl, loadImages: false);

                    User author = new User
                    {
                        Nickname = ActiveInstance.ActiveTab.FindElementByXPath("//a[contains(@class, 'username')]", 0).InnerText,
                        Rank = ActiveInstance.ActiveTab.FindElementByXPath("//div[contains(@class, 'userBanner')]/strong", 0).InnerText,
                        PostCount = int.Parse(ActiveInstance.ActiveTab.FindElementByXPath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd", 0).InnerText),
                        Gender = ActiveInstance.ActiveTab.FindElementByXPath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd", 0).InnerText
                    };

                    SaveAuthorToFile(author);
                }
            }

            public void SaveAuthorToFile(User author)
            {
                string authorInfo = $"Nickname: {author.Nickname}\n" +
                                    $"Rank: {author.Rank}\n" +
                                    $"PostCount: {author.PostCount}\n" +
                                    $"Gender: {author.Gender}";

                string fileName = $"author_info_{author.Nickname}.txt";
                File.WriteAllText(fileName, authorInfo);
            }
        }

        public class User
        {
            public string Nickname { get; set; }
            public string Rank { get; set; }
            public int PostCount { get; set; }
            public string Gender { get; set; }
        }
    }
}
Код в кубике:
C#:
var scraper = new ZennoLab.OwnCode.CommonCode.ScrapeAuthor(Project, Instance);
scraper.Execute();
Логи с ошибками:
14:50:48 Компиляция кода Ошибка в действии "CS0103" "The name 'Project' does not exist in the current context". [Строка: 1; Cтолбец: 60]
14:50:48 Компиляция кода Ошибка в действии "CS0119" "'Instance' is a type, which is not valid in the given context". [Строка: 1; Cтолбец: 69]
14:50:48 Компиляция кода проекта Ошибка при компиляции общего кода "CS1061" "'string' does not contain a definition for 'ToList' and no accessible extension method 'ToList' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)". [Строка: 31; Cтолбец: 97]
14:50:48 Компиляция кода проекта Ошибка при компиляции общего кода "CS1739" "The best overload for 'Navigate' does not have a parameter named 'loadImages'". [Строка: 35; Cтолбец: 66]
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
996
Благодарностей
535
Баллы
93
Попробовал, но все равно не работает( Пробовал с помощью ChatGPT устранить ошибки, но максимум чего добился, это сокращение кол-ва ошибок с 8 до 4. Может быть тут кому то удастся помочь устранить ошибки)

Мой общий код:

C#:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;

namespace ZennoLab.OwnCode
{
    public class CommonCode
    {
        public static object SyncObject = new object();

        public class ScrapeAuthor
        {
            private IZennoPosterProjectModel Project { get; }
            private Instance ActiveInstance { get; }

            public ScrapeAuthor(IZennoPosterProjectModel project, Instance instance)
            {
                Project = project;
                ActiveInstance = instance;
            }

            public void Execute()
            {
                List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Value.ToList());

                foreach (string threadUrl in threadURLs)
                {
                    ActiveInstance.ActiveTab.Navigate(threadUrl, loadImages: false);

                    User author = new User
                    {
                        Nickname = ActiveInstance.ActiveTab.FindElementByXPath("//a[contains(@class, 'username')]", 0).InnerText,
                        Rank = ActiveInstance.ActiveTab.FindElementByXPath("//div[contains(@class, 'userBanner')]/strong", 0).InnerText,
                        PostCount = int.Parse(ActiveInstance.ActiveTab.FindElementByXPath("//dl[contains(@class, 'pairs') and dt[text()='Сообщения']]/dd", 0).InnerText),
                        Gender = ActiveInstance.ActiveTab.FindElementByXPath("//dl[contains(@class, 'pairs') and dt[text()='Пол']]/dd", 0).InnerText
                    };

                    SaveAuthorToFile(author);
                }
            }

            public void SaveAuthorToFile(User author)
            {
                string authorInfo = $"Nickname: {author.Nickname}\n" +
                                    $"Rank: {author.Rank}\n" +
                                    $"PostCount: {author.PostCount}\n" +
                                    $"Gender: {author.Gender}";

                string fileName = $"author_info_{author.Nickname}.txt";
                File.WriteAllText(fileName, authorInfo);
            }
        }

        public class User
        {
            public string Nickname { get; set; }
            public string Rank { get; set; }
            public int PostCount { get; set; }
            public string Gender { get; set; }
        }
    }
}
Код в кубике:
C#:
var scraper = new ZennoLab.OwnCode.CommonCode.ScrapeAuthor(Project, Instance);
scraper.Execute();
Логи с ошибками:
14:50:48 Компиляция кода Ошибка в действии "CS0103" "The name 'Project' does not exist in the current context". [Строка: 1; Cтолбец: 60]
14:50:48 Компиляция кода Ошибка в действии "CS0119" "'Instance' is a type, which is not valid in the given context". [Строка: 1; Cтолбец: 69]
14:50:48 Компиляция кода проекта Ошибка при компиляции общего кода "CS1061" "'string' does not contain a definition for 'ToList' and no accessible extension method 'ToList' accepting a first argument of type 'string' could be found (are you missing a using directive or an assembly reference?)". [Строка: 31; Cтолбец: 97]
14:50:48 Компиляция кода проекта Ошибка при компиляции общего кода "CS1739" "The best overload for 'Navigate' does not have a parameter named 'loadImages'". [Строка: 35; Cтолбец: 66]
C#:
var scraper = new ZennoLab.OwnCode.CommonCode.ScrapeAuthor(project, instance);
scraper.Execute();
Проджект и инстанс вроде как с маленькой буквы пишутся


В 35 строке вот так должно быть
C#:
ActiveInstance.ActiveTab.Navigate(threadUrl);
А вот тут надо список по другому объявить, я не за компом, точно не подскажу
C#:
List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Value.ToList());
 
Последнее редактирование:
  • Спасибо
Реакции: ssernik272

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
интересная забава заставлять пользователей форума разгадывать ребусы, которые задаёт ии
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
996
Благодарностей
535
Баллы
93
интересная забава заставлять пользователей форума разгадывать ребусы, которые задаёт ии
Особенно после криков ко-ко-ко ии скоро кодеров заменит )
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113

Sherminator

Client
Регистрация
10.09.2021
Сообщения
996
Благодарностей
535
Баллы
93

ssernik272

Новичок
Регистрация
30.04.2023
Сообщения
6
Благодарностей
0
Баллы
1
C#:
var scraper = new ZennoLab.OwnCode.CommonCode.ScrapeAuthor(project, instance);
scraper.Execute();
Проджект и инстанс вроде как с маленькой буквы пишутся


В 35 строке вот так должно быть
C#:
ActiveInstance.ActiveTab.Navigate(threadUrl);
А вот тут надо список по другому объявить, я не за компом, точно не подскажу
C#:
List<string> threadURLs = new List<string>(Project.Variables["ThreadURL"].Value.ToList());
Благодарю, код скомпилировался)
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)