Namespace для глобальной переменной используй или по project.TaskId или по имени шаблона, который можно взять из:
ZennoPoster.GetTaskInfo(Guid.Parse(project.TaskId));
string xPath = "//span[text()='Показать ещё']";
HtmlElement he = instance.ActiveTab.FindElementByXPath(xPath, 0);
if (he.IsVoid) throw new Exception("не найдено и т.д.");
he.ScrollIntoView();
Возможно, имеется в виду, 3 любых подряд стоящих одинаковых букв в верхнем регистре (найдёт ровно 3 буквы, меньше и больше 3 не найдёт)
([A-Z])(?<!\1.)\1{2}(?!\1)
У вас же есть функция handleButtonClick, добавьте в неё window.kakyato_peremennaya = buttonValue;
И после отработки клика на кнопке забирайте жсом значение - return window.kakyato_peremennaya;
Этот пример рабочего кода, который из вашей страницы сделан (сначала только нужно нажать чекбокс).
Можете для удобства в хроме зайти на эту страницу и ПКМ -> показать код.
В консоли тестируете js, затем переносите в зену.
Метамаск находится за shadow-dom.
Только через js или поиск по картинке.
Что-то вроде -
var mtm = document.getElementsByTagName('onboard-v2')[0]
.shadowRoot
.querySelector('div[class*="name"]')...
Не обязательно, можно и на кубиках. А всем кубикам, которые связаны с элементами на странице вывести по красной на паузу, а с паузы на тот же кубик. Если выскочит капча, то шаблон зациклиться, пока асинхрон не решит капчу.
Надо преобразовать массив данных в строку. Например, можно так:
var zt = project.Tables["tmp"];
string tosql = "";
for(int i = 0; i < zt.RowCount; i++){
string name = zt.GetCell("A",i);
string age = zt.GetCell("B",i);
tosql += $"('{name}', '{age}'),";
}
return "INSERT INTO zennolab...