Не компилируется сниппет 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
Сообщения
1 007
Благодарностей
538
Баллы
113
Попробовал, но все равно не работает( Пробовал с помощью 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 599
Баллы
113
интересная забава заставлять пользователей форума разгадывать ребусы, которые задаёт ии
 

Sherminator

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

doc

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

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 007
Благодарностей
538
Баллы
113

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)