Кто-нибудь из друзей объяснит мне этот основной код C #? :)

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
Привет, друзья,

Извините, я новичок в C #, я пытаюсь изучить некоторые базовые команды Zenno и хочу попробовать использовать C # в Zenno в будущем :-)

Я немного смущен кодом "FindElementBy ...", например, в этом коде на уроке Zenno.


HtmlElement he = doc.FindElementByAttribute ("input: checkbox", "fulltag", "input: checkbox", "text", 0);

Для ("input: checkbox", "fulltag", "input: checkbox", "text", 0), что они означают? Почему есть 2 "input: checkbox"? Что такое "текст" и "0"?

Пожалуйста, обратитесь к моему скриншоту, если я хочу "FindElementByAttribute" из поля ввода Google, как написать код C #?

Извините за мой вопрос, так как я новичок :-) Также извините за мой русский, перевод с английского :-)


Большое спасибо!

UPD: Russian lang on the Russian side of the forum. Thread moved. - lokiys
 

Вложения

Последнее редактирование модератором:

lokiys

Moderator
Регистрация
01.02.2012
Сообщения
4 812
Благодарностей
1 187
Баллы
113

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Старайся срезу перейти на Xpath
Жизнь потом сильно проще станет в плане поиска элементов.

Базу можно почитать тут
http://zvon.org/xxl/XPathTutorial/Output_rus/example18.html

Потому что потом начнутся ну очень длинные выражения для четкого поиска нужного элемента. Обычным поиском - такое геморно делать.
 
  • Спасибо
Реакции: jackeyroe1

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
C#:
{
    // clear cookie
    instance.ClearCookie();
    
    // go to lessons.zennolab.com
    Tab tab = instance.ActiveTab;
    if ((tab.IsVoid) || (tab.IsNull)) return -1;
    if (tab.IsBusy) tab.WaitDownloading();
    tab.Navigate("www.google.ru", "");
    if (tab.IsBusy) tab.WaitDownloading();
    
    // find element by xpath
    HtmlElement he = tab.FindElementByXPath("//*[contains(@class, 'RNNXgb')]//*[@name='q']", 0);
    if (he.IsVoid) return -2;
    
    return 0;
}
 
  • Спасибо
Реакции: jackeyroe1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
C#:
{
    // clear cookie
    instance.ClearCookie();
   
    // go to lessons.zennolab.com
    Tab tab = instance.ActiveTab;
    if ((tab.IsVoid) || (tab.IsNull)) return -1;
    if (tab.IsBusy) tab.WaitDownloading();
    tab.Navigate("www.google.ru", "");
    if (tab.IsBusy) tab.WaitDownloading();
   
    // find element by xpath
    HtmlElement he = tab.FindElementByXPath("//*[contains(@class, 'RNNXgb')]//*[@name='q']", 0);
    if (he.IsVoid) return -2;
   
    return 0;
}
В этом коде надо дополнительно обрабатывать return -1 ))
тут надо пояснения как правильно этот код куда пихать))
 
  • Спасибо
Реакции: jackeyroe1

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
В этом коде надо дополнительно обрабатывать return -1 ))
тут надо пояснения как правильно этот код куда пихать))
https://help.zennolab.com/en/v5/zennoposter/5.11.7.0/webframe.html#topic421.html Тут написано, куда пихать или вставлять)
Знаешь что я в коде не понимаю, зачем ты у меня такие вещи спрашиваешь
 
  • Спасибо
Реакции: jackeyroe1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
ну ну. Функция
Execute
Очень информативно)) И все равно про доп обработку кодов -1 и -2 не говорится.

Пример из хелпа - скорее пример использования, а не реальный пример
 
  • Спасибо
Реакции: jackeyroe1

volody00

Client
Регистрация
06.09.2016
Сообщения
918
Благодарностей
953
Баллы
93
название тэга, название атрибута, значение атрибута, тип поиска, номер элемента. Для гугла:
Tab tab = instance.ActiveTab;
HtmlElement he = doc.FindElementByAttribute("input:text", "name", "0", "text", 0);
he.SetValue("true", "Middle", true);

P.S. Не проверял код, на вскидку написал
 
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
C#:
{
    // clear cookie
    instance.ClearCookie();
    
    // go to lessons.zennolab.com
    Tab tab = instance.ActiveTab;
    if ((tab.IsVoid) || (tab.IsNull)) return -1;
    if (tab.IsBusy) tab.WaitDownloading();
    tab.Navigate("www.google.ru", "");
    if (tab.IsBusy) tab.WaitDownloading();
    
    // find element by xpath
    HtmlElement he = tab.FindElementByXPath("//*[contains(@class, 'RNNXgb')]//*[@name='q']", 0);
    if (he.IsVoid) return -2;
    
    return 0;
}
Что это значит "return -1" "return -2" "return 0"? Спасибо:-)
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Последнее редактирование:
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
I do not understand the code.
Хорошо :-) И я нахожу, что где-то, которые используют HtmlElement he = tab.MainDocument.FindElementByXPath ("..."); не использовать HtmlElement he = tab.FindElementByXPath ("..."), эти 2 кода одинаковы? Спасибо :-)
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Что это значит "return -1" "return -2" "return 0"? Спасибо:-)
В примере - это кусок из хелпа, где функция поиска элемента оформлена именно как отдельаня функция в owncode.
И функция эта может завершится успешно, так и не успешно.
Обычно принято что отрицательные значения возврата функции - это ошибки.
т.е. если то, что вернуло НЕ отрицательные числа, то скорее функция успешно выполнилась (упрощенно)
А по коду отрицательно числа можно понять какая именно ошибка и можно это выводить в лог для будущего контроля.
 
  • Спасибо
Реакции: jackeyroe1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
вывод №2 - если ты НЕ контролирует сознательно все возможные варианты выполнения функции - НЕ ПАРЬСЯ. А то только ошибок дабавит.
Сначала делай минимально рабочий вариант, а потом наворотишь на основе ранее просмотренных заделов.
 
  • Спасибо
Реакции: jackeyroe1

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
Вот хороший код, где то на форуме нашел.
C#:
HtmlElement he = null;
for (int i = 0; i<10; i++)
{
    var tab = instance.ActiveTab;
    tab.Navigate(@"https://yandex.ru/");
    if (tab.IsBusy) tab.WaitDownloading();
    he = tab.FindElementByAttribute("input:search","name","text","text",0);// прописать свои параметры поиска элемента
    if (!he.IsNull)
    {
            return "OK";
    }
}
return null;
В мобильном яндексе использую.Если поле не найдет, будет несколько раз пробовать загрузить, как подправить чтобы по больше раз побывал загрузить?
 
  • Спасибо
Реакции: jackeyroe1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Вот хороший код, где то на форуме нашел.
C#:
HtmlElement he = null;
for (int i = 0; i<10; i++)
{
    var tab = instance.ActiveTab;
    tab.Navigate(@"https://yandex.ru/");
    if (tab.IsBusy) tab.WaitDownloading();
    he = tab.FindElementByAttribute("input:search","name","text","text",0);// прописать свои параметры поиска элемента
    if (!he.IsNull)
    {
            return "OK";
    }
}
return null;
В мобильном яндексе использую.
И сразу лови замечания
1. Ты значения return вообще обрабатываешь? Если нет, то нафиг они там надо.
2. От момента когда зенка скажет !tab.IsBusy и до реальной загрузки - может пройти время, а ты проверяешь сразу элемент. А если не нашел - то не пробуешь подождать чуть чуть, а сразу перегружаешь страницу.
3. Иногда, ты заранее не знаешь какой элемент надо ждать)) Если включатеся антифорд (например), то там много вариантов что именно тебе кинет. От секретного вопроса, до капчи. Что именно будешь контролировать? А... И если сервис мульти язычный, то ты даже язык заранее не можешь знать, на котором спросит)) И верстка на разных языках бывает разная. Потому это нифига не универсально))


Самое банальное и рабочее - просто 1-3 сек подождать после if (tab.IsBusy) tab.WaitDownloading();
Намного проще контролировать.
Или если заморочится, то 3 попытки ждать, а если не получилось, только тогда перезагрузка страницы.
 
  • Спасибо
Реакции: jackeyroe1

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
И сразу лови замечания
1. Ты значения return вообще обрабатываешь? Если нет, то нафиг они там надо.
2. От момента когда зенка скажет !tab.IsBusy и до реальной загрузки - может пройти время, а ты проверяешь сразу элемент. А если не нашел - то не пробуешь подождать чуть чуть, а сразу перегружаешь страницу.
3. Иногда, ты заранее не знаешь какой элемент надо ждать)) Если включатеся антифорд (например), то там много вариантов что именно тебе кинет. От секретного вопроса, до капчи. Что именно будешь контролировать? А... И если сервис мульти язычный, то ты даже язык заранее не можешь знать, на котором спросит)) И верстка на разных языках бывает разная. Потому это нифига не универсально))


Самое банальное и рабочее - просто 1-3 сек подождать после if (tab.IsBusy) tab.WaitDownloading();
Намного проще контролировать.
Или если заморочится, то 3 попытки ждать, а если не получилось, только тогда перезагрузка страницы.
Капча только после слова, может выскочить. Сразу с первого захода не когда не было капчи. В сутки с 200 заходов одна выскакиевает, а иногда не выскакивает. Если страница не загрузилось будет сигнал
 
  • Спасибо
Реакции: jackeyroe1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Капча только после слова, может выскочить. Сразу с первого захода не когда не было капчи. В сутки с 200 заходов одна выскакиевает, а иногда не выскакивает. Если страница не загрузилось будет сигнал
Ты просто только под яшу делаешь.
А сервисов всяких много и оно бывают изобретательны.
И код лучше иметь универсальный.
Я, например, на основе одних и тех же наработок шлепаю разные шаблоны. А owncode вообще для всех одинаковый и только эволюционирует вверх.
 
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
Everything is correct, the same, because I copied it from there)
Привет, друг, на этой странице,
найдите элемент, используя параметр «текст», но я искал флажок в создателе проекта, имя атрибута «класс», но не «текст», почему код использует «текст»? И на странице, я думаю, нет параметра «текст». Зачем? Thank you :-)
 

Вложения

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
745
Баллы
113
[QUOTE = "jackeyroe1, сообщение: 543485, участник: 6525»]
Привет, друг, на этой странице,
[URL unfurl = "true"] https://help.zennolab.com/en/v7/zennoposter/7.1.4/webframe.html#topic64.html [/ URL]
найдите элемент, используя параметр «текст», но я искал флажок в создателе проекта, имя атрибута «класс», но не «текст», почему код использует «текст»? И на странице, я думаю, нет параметра «текст». Зачем? Thank you :-)
[/ QUOTE]
 

Вложения

  • 18,8 КБ Просмотры: 93

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Привет, друг, на этой странице,
найдите элемент, используя параметр «текст», но я искал флажок в создателе проекта, имя атрибута «класс», но не «текст», почему код использует «текст»? И на странице, я думаю, нет параметра «текст». Зачем? Thank you :-)
You can write in English. This is more understandable than automatic translation into Russian.
 

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
You can write in English. This is more understandable than automatic translation into Russian.
Thank you, and what I mean is, in this Zenno help page,
Please refer to the screenshot attached, the help page using "find element using "text" parameter" to click the checkbox, I tested in Project maker action designer, there are only "input checkbox" "class" "inputs" "regexp" parameters, no "text" parameter, so how we know and why we use "text" parameter to find the element in the code? Would you pls explain for me? Thanks much :-)
 

Вложения

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
Thank you, and what I mean is, in this Zenno help page,
Please refer to the screenshot attached, the help page using "find element using "text" parameter" to click the checkbox, I tested in Project maker action designer, there are only "input checkbox" "class" "inputs" "regexp" parameters, no "text" parameter, so how we know and why we use "text" parameter to find the element in the code? Would you pls explain for me? Thanks much :-)
1. Firstly, read the article. There are a lot of interesting things about searching of elements. https://zennolab.com/discussion/threads/pravilnyj-poisk-ehlementov-na-stranice-i-rabota-s-nimi-osnovy-i-xitrosti-dolzhen-znat-kazhdyj.23622/
Such as http://prntscr.com/tg0v9n

2. Mainly, if you use "text", you must specify the exact match. Unfortunately, the exact value can't always be identified.
3. Mostly is used "regexp" - because it is more usefull. Because it is regexp))
 
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
1. Firstly, read the article. There are a lot of interesting things about searching of elements. https://zennolab.com/discussion/threads/pravilnyj-poisk-ehlementov-na-stranice-i-rabota-s-nimi-osnovy-i-xitrosti-dolzhen-znat-kazhdyj.23622/
Such as http: // prntscr.com/tg0v9n

2. Mainly, if you use "text", you must specify the exact match. Unfortunately, the exact value can't always be identified.
3. Mostly is used "regexp" - because it is more usefull. Because it is regexp))
Aha, got it, very useful! I will use "regexp" or "XPath", thanks much! :-)
 

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
  • Спасибо
Реакции: Iv1

Iv1

Client
Регистрация
21.02.2016
Сообщения
1 947
Благодарностей
767
Баллы
113
  • Спасибо
Реакции: jackeyroe1

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
Why don't you ask in the English part of the forum?
Another language creates the same problems ...
Thank you, and in my mind that many expert of ZennoPoster are Russian, such as you :-), so I posted threads into Russian forum, otherwise they (include you) could not visit my posts. :-)
 

jackeyroe1

Client
Регистрация
17.10.2013
Сообщения
218
Благодарностей
50
Баллы
28
Why don't you ask in the English part of the forum?
Another language creates the same problems ...
Do you know where can we copy or download some language lists like this format? For the emulation of our projects :-)
"ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
"ru-RU,ru;q=0.9,en;q=0.8",
"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
"en-US,en;q=0.5",
"en-US,en;q=0.8,es;q=0.6",
"en-US,en;q=0.8,nl;q=0.6,el;q=0.4,de;q=0.2"
 

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