Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
doc=ъ(ъ(HtmlAnchorElement.NavigateAsync()).Result);
Перечислимый=ъ(Врап.ПолучитьИнтерфейс(Объект.ПолучитьСсылку(),"IEnumerable"));
Перечислимый=ъ(Объект.as("IEnumerable"));
Перечислитель=ъ(Перечислимый.GetEnumerator());
// На всякий случай приведем к Интерфейсу IEnumerator
Перечислитель=ъ(Перечислитель.as("IEnumerator"));
var config = Configuration.Default.WithDefaultLoader().WithCookies();
config = ъ(ъ(ъ(Configuration.Default).WithDefaultLoader()).WithCookies());
config = ъ(ъ(ъ(Configuration.Default).WithDefaultLoader()).WithCookies());
СоздатьОбъектПоСсылке (СоздатьОбъектПоСсылке (СоздатьОбъектПоСсылке (Configuration.Default).WithDefaultLoader()).WithCookies());
$("div.test").add("p.quote").addClass("blue").slideDown("slow");
//1С при передаче по ссылке свойства ВК Список.Current
// при выходе из метода присваивает Список.Current значение переданное изначально
// Поэтому помечаем входной параметр как Знач
//Или же делать так, если методы изменить нельзя
// То нужно присвоить значение переменной и вызвать метод передав в параметрах эту переменную
//Стр=Список.Current;
//Зазача=ъ(Стр);
Функция Ъ(знач Ссылка)
// Создаем объект по ссылке полученной из методов .Net классов
//Физически это строка ёЁ<Ьъ>№_%)Э?&2 содержащее 12 символов для отделения их от других строк
//и индекс в спике исполуемых объектов на стороне .Net
рез = Новый("AddIn.NetObjectToNative.NetObjectToNative");
// И установим ссылку
рез.УстановитьСсылку(Ссылка);
возврат рез
КонецФункции // СоздатьОбъектПоСсылке()
Configuration.Default.WithDefaultLoader().WithCookies();
var configuration = AngleSharp.Configuration.Default;
configuration=AngleSharp.ConfigurationExtensions.WithDefaultLoader(configuration);
configuration = AngleSharp.ConfigurationExtensions.WithCookies(configuration);
// Так как функция WithDefaultLoader представляет функцию расширения
// так как первый параметр помечен как this
// Что позволяет использовать этот метод через точку
public static IConfiguration WithDefaultLoader(this IConfiguration configuration, Action<LoaderService> setup = null, IEnumerable<IRequester> requesters = null);
//Получить типизированную дженерик функцию
//TElement QuerySelector<TElement>(this IParentNode parent, string selectors)
Функция ПолучитьДжененрикМетодИнфо(тип,ИмяМетода,типПараметра)
method = Врап.ТипКакОбъект(тип).GetMethod(ИмяМетода);
generic = method.MakeGenericMethod(типПараметра);
return generic;
КонецФункции
// Когда есть перегрузка методов нужно искать метод по имени и типам параметров
// Task<IDocument> Navigate<TElement>(this TElement element)
// string Text<T>(this T element)
Функция ПолучитьМетодИнфоОдинДженерикТип(тип,ИмяМетода,типПараметра)
Для Каждого m in Врап.ТипКакОбъект(тип).GetMethods() Цикл
параметры = m.GetParameters();
if (m.Name = ИмяМетода)
И (параметры.Length = 1)
И (Врап.ТипКакОбъект(параметры.GetValue(0).ParameterType).IsGenericParameter)
Тогда
method = m;
break;
КонецЕсли
КонецЦикла;
generic = method.MakeGenericMethod(типПараметра);
return generic;
КонецФункции
Функция ПолучитьМетодИнфо(тип,ИмяМетода)
method = Врап.ТипКакОбъект(тип).GetMethod(ИмяМетода);
return method;
КонецФункции
Функция ПолучитьПропертиИнфо(тип,ИмяСвойства)
свойство = Врап.ТипКакОбъект(тип).GetProperty(ИмяСвойства);
return свойство;
КонецФункции
Функция ПолучитьМетодИнфо2Параметра(тип,ИмяМетода)
Для Каждого m in Врап.ТипКакОбъект(тип).GetMethods() Цикл
параметры = m.GetParameters();
if (m.Name = ИмяМетода)
И (параметры.Length = 2)
Тогда
method = m;
break;
КонецЕсли
КонецЦикла;
return method;
КонецФункции
Функция Получить_SBAppend()
Для Каждого m in Врап.ТипКакОбъект(StringBuilder).GetMethods() Цикл
параметры = m.GetParameters();
if ( (m.Name = "Append")
И (параметры.Length = 1)
И (Врап.ТипКакОбъект(параметры.GetValue(0).ParameterType).Equals(String)))
Тогда
возврат m
КонецЕсли
КонецЦикла;
возврат Неопределено
КонецФункции
Процедура AngleSharpFormНажатие(Элемент)
// Вставить содержимое обработчика.
ПутьКСборке="d:\Vs2015Programs\TestScriptingAPI\TestScriptingAPI\bin\Debug\AngleSharp.dll";
WebsiteUrl = "http://localhost:54361";
// Получим используемые типы
AngleSharp_ConfigurationExtensions = Врап.ПолучитьТип("AngleSharp.ConfigurationExtensions");
BrowsingContext = Врап.ПолучитьТип("AngleSharp.BrowsingContext");
BrowsingContextExtensions = Врап.ПолучитьТип("AngleSharp.BrowsingContextExtensions");
ApiExtensions = Врап.ПолучитьТип("AngleSharp.Extensions.ApiExtensions");
// Получим типы нужных интерфейсов
IHtmlAnchorElement = Врап.ПолучитьТип("AngleSharp.Dom.Html.IHtmlAnchorElement");
IHtmlFormElement = Врап.ПолучитьТип("AngleSharp.Dom.Html.IHtmlFormElement");
IElement=Врап.ПолучитьТип("AngleSharp.Dom.IElement");
// Получим типизированные функции
QuerySelector_AnchorElement = ПолучитьДжененрикМетодИнфо(ApiExtensions, "QuerySelector",IHtmlAnchorElement);
QuerySelector_FormElement = ПолучитьДжененрикМетодИнфо(ApiExtensions, "QuerySelector",IHtmlFormElement);
ApiExtensions_Navigate=ПолучитьМетодИнфоОдинДженерикТип(ApiExtensions,"Navigate",IHtmlAnchorElement);
ApiExtensions_Text= ПолучитьМетодИнфоОдинДженерикТип(ApiExtensions,"Text",IElement);
configuration = Configuration.Default;
configuration = AngleSharp_ConfigurationExtensions.WithDefaultLoader(configuration);
configuration = AngleSharp_ConfigurationExtensions.WithCookies(configuration);
context = BrowsingContext.New(configuration);
// Загрузим начальную страницу
BrowsingContextExtensions.OpenAsync(context, WebsiteUrl).Wait();
doc = context.Active;
// Получим ссылку содержащий адрес страницы для авторизации
//<a class="log-in" href="/Home/LogIn">log in here</a>
HtmlAnchorElement = Врап.MethodInfo_Invoke(QuerySelector_AnchorElement,Неопределено,doc, "a.log-in");
// var HtmlAnchorElement = AngleSharp.Extensions.ApiExtensions.QuerySelector<AngleSharp.Dom.Html.IHtmlAnchorElement>(doc, "a.log-in");
// И перейдем на страницу авторизации
// doc = ApiExtensions.Navigate(HtmlAnchorElement).Result;
doc = Врап.MethodInfo_Invoke(ApiExtensions_Navigate,Неопределено,HtmlAnchorElement).Result;
// doc = context.Active;
// Получим форму
//скрытый элемент для верификации который нужно отправить
//<input name="__RequestVerificationToken" type="hidden" value="2Y-sFIY9JBZc6wc7antGFsBPG1GoiYCbVDtS0khv3JRkcG8CuN69pS3tAZrSiTevGkBjzpTF9AnuK8tZEUrjqn4qB_lbF4dVxsQBubYZkck1">
HtmlFormElement = Врап.MethodInfo_Invoke(QuerySelector_FormElement,Неопределено,doc, "form");
// var HtmlFormElement = AngleSharp.Extensions.ApiExtensions.QuerySelector<AngleSharp.Dom.Html.IHtmlFormElement>(doc, "form");
d = Врап.СоздатьОбъект(Dictionary);
d.Add("User", "User");
d.Add("Password", "secret");
// Авторизуемся установив нужные поля и отправим Post запрос на сервер
ApiExtensions.Submit(HtmlFormElement, d).Wait();
doc = context.Active;
// получим ссылку на искомую страницу
//<a class="secret-link" href="/Home/Secret">our secret</a>
HtmlAnchorElement = Врап.MethodInfo_Invoke(QuerySelector_AnchorElement,null, doc, "a.secret-link");
// HtmlAnchorElement = AngleSharp.Extensions.ApiExtensions.QuerySelector<AngleSharp.Dom.Html.IHtmlAnchorElement>(doc, "a.secret-link");
// Перейдем по ссылке
// doc = ApiExtensions.Navigate(HtmlAnchorElement).Result;
doc = Врап.MethodInfo_Invoke(ApiExtensions_Navigate,null,HtmlAnchorElement).Result;
// В первом селекторе параграфе лежит искомая строка
//<p>The answer to everything is <span id="secret">42</span>.</p>
селектор=doc.QuerySelector("p");
резулт = Врап.MethodInfo_Invoke(ApiExtensions_Text,null,селектор);
// резулт =The answer to everything is 42
Сообщить(резулт);
КонецПроцедуры
НачатьКомментарий
ПечатьТекст РусскийЯзыкСмешатьСАнглийскийЯзык Аз ЕсмьЗло
КонецКомментарий
РасширенияДляТестовый=ъ(СборкаТестовый.Тип("TestDllForCoreClr.РасширенияДляТестовый"));
Врап.ДобавитьСиноним(РасширенияДляТестовый.ПолучитьСсылку(),"GetStringFromExtensionWithParams","ПолучитьСтрокуИзРасширенияСпарам");
// Вызовем по оригигальному названию
Сообщить(Тест.ПолучитьСтрокуИзРасширенияСпарам("Привет"));
// Вызовем по синониму
Сообщить(Тест.GetStringFromExtensionWithParams("Привет из GetStringFromExtensionWithParams"));
Кроссплатформенное использование классов .Net в 1С через Native ВК. Или замена COM на Linux II