csharp Публикациятвита(исходныйкод)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp Публикациятвита(исходныйкод)相关的知识,希望对你有一定的参考价值。
string strTweetText = String.Format("Всем большой-большой привет из {0} :)))))", project.Variables["str_privet_from"].Value);
string strJobAttachments = project.Directory + @"\images\image1.jpg;" +
project.Directory + @"\images\image2.jpg";
SibboraHelper.FarmHelper fHelper = new SibboraHelper.FarmHelper();
SibboraHelper.WebHelper wHelper = new SibboraHelper.WebHelper();
fHelper.FarmDBConnstring = project.Variables["str_db_connstring"].Value;
Tab Tab1 = instance.ActiveTab;
//Грузим профиль из базы фермы
try{
fHelper.ProfileEnvLoader(instance, project.Profile, "fzp_services.account_role='test_twitter'", null);
project.SendInfoToLog("Current_Login: " + fHelper.ServiceLogin);
project.SendInfoToLog("Current_Password: " + fHelper.ServicePassword);
project.SendInfoToLog("Current_ProfileID: " + fHelper.ProfileID);
}catch(Exception e){
project.SendErrorToLog("err: ProfileEnvLoader: " + e.Message);
}
//Переходим в твиттер, проверяем вход по кукам, входим вручную при необходимости
if (Tab1.URL!="https://twitter.com/") {
Tab1.Navigate("https://twitter.com/");
if (Tab1.IsBusy)
Tab1.WaitDownloading();
}
if (!Tab1.FindElementByXPath("//button[contains(@class, 'StreamsLogin')]",0).IsVoid) {
//Пробуем войти по имени пользователя и паролю
project.SendInfoToLog("Входа по кукам нет. Входим по паролю");
Tab1.FindElementByXPath("//button[@class='Button StreamsLogin js-login']",0).Click();
wHelper.SetElementValueXPath(Tab1, true, null, "//div[@class='LoginDialog-body modal-body']/descendant::input[contains(@name, 'username_or_email')]", 0, fHelper.ServiceLogin, "Middle", false, false, new int[3] {1000, 1500, 5000});
wHelper.SetElementValueXPath(Tab1, true, null, "//div[@class='LoginDialog-body modal-body']/descendant::input[contains(@name, 'password')]", 0, fHelper.ServicePassword, "Middle", false, false, new int[3] {1000, 1500, 5000});
Tab1.FindElementByXPath("//div[@class='LoginDialog-body modal-body']/descendant::input[contains(@class, 'submit')]", 0).Click();
if (Tab1.IsBusy)
Tab1.WaitDownloading();
if (!Tab1.FindElementByXPath("//div[@class='signin-wrapper']",0).IsVoid)
return "err: имя и пароль не подошли";
}
HtmlElement elLeftSidebar = Tab1.FindElementByXPath("//div[@class='dashboard dashboard-left']",0);
wHelper.ClickElementXPath(Tab1, false, elLeftSidebar, "//a", 0, false, new int[3] {1500, 1500, 25000});
wHelper.WaitElementPresenceXPath(Tab1, true, null, "//button[@class='UserActions-editButton edit-button btn']", 0, "present", new int[3] {0, 1500, 25000});
wHelper.ClickElementXPath(Tab1, true, null, "//button[@id='global-new-tweet-button']", 0, false, new int[3] {2000, 1500, 15000});
try{
//Иногда кнопка "твитнуть" почему-то ндоступна
wHelper.WaitElementStyleXPath(Tab1, true, null, "//div[@id='global-tweet-dialog']", 0, "display:block", false, new int[3] {0, 1500, 25000});
}catch{
Tab1.Navigate(Tab1.URL);
wHelper.ClickElementXPath(Tab1, true, null, "//button[@id='global-new-tweet-button']", 0, false, new int[3] {2000, 1500, 15000});
wHelper.WaitElementStyleXPath(Tab1, true, null, "//div[@id='global-tweet-dialog']", 0, "display:block", false, new int[3] {0, 1500, 25000});
}
HtmlElement elGlobalTweetDialog = Tab1.FindElementByXPath("//div[@id='global-tweet-dialog']",0);
wHelper.SetElementValueXPath(Tab1, true, elGlobalTweetDialog, "//div[@id='tweet-box-global']", 0, strTweetText, "Middle", false, false, new int[3] {1000, 1500, 15000});
//Грузим картинки
if (strJobAttachments!=String.Empty) {
instance.SetFileUploadPolicy("ok", "");
string[] arrFilesPathes = strJobAttachments.Split(new Char [] {';'});
int intImagesUploaded=0;
foreach (string strFilePath in arrFilesPathes) {
instance.SetFilesForUpload(strFilePath);
HtmlElement elTweetModal = Tab1.FindElementByXPath("//div[@id='global-tweet-dialog']",0);
HtmlElement elImageUpload = elTweetModal.FindChildByAttribute("input:file", "fulltag", "input:file", "text", 0);
elImageUpload.RiseEvent("click", instance.EmulationLevel);
intImagesUploaded++;
wHelper.WaitElementCountXPath(Tab1, true, elTweetModal, "//div[@class='thumbnail-container' or @class='previews']/descendant::*[contains(@class, 'close') or contains(@class, 'dismiss')]", intImagesUploaded, "equal", new int[3] {0, 1500, 25000});
}
}
//Кликаем на "опубликовать", проверяем
wHelper.AddInfoToLog("Кликаем на -Опубликовать, проверяем что твит опубликовался");
//wHelper.ClickElementXPath(Tab1, true, elGlobalTweetDialog, "//div[@class='tweet-button']/button", 0, false, new int[3] {0, 1500, 5000});
wHelper.ClickElementXPath(Tab1, true, elGlobalTweetDialog, "//span[@class='Icon Icon--tweet']/ancestor::button[1]", 0, false, new int[3] {0, 1500, 15000});
wHelper.WaitElementStyleXPath(Tab1, true, null, "//div[@id='global-tweet-dialog']", 0, "display:none", true, new int[3] {0, 1500, 35000});
wHelper.WaitElementAttributeAttr(Tab1, true, null, "p", "class", "TweetTextSize", "regexp", 0, "InnerHtml",
strTweetText, "contains", new int[3] {0, 1500, 25000});
//Сохраняем скриншот опубликованного твита
System.Threading.Thread.Sleep(4500); //Ждём скрытия оповещения "ваш твит опубликован"
string strScreenFileName = project.Directory+"\\screenshots\\job_" + DateTime.Now.ToString("HHmmss") + ".png";
if (File.Exists(strScreenFileName))
File.Delete(strScreenFileName);
HtmlElement elLastTweet = Tab1.FindElementByAttribute("li", "id", "stream-item-tweet", "regexp", 0).FindChildByXPath(".//div[@class='content']",0);
System.IO.File.WriteAllBytes(strScreenFileName, Convert.FromBase64String(elLastTweet.DrawToBitmap(false)));
以上是关于csharp Публикациятвита(исходныйкод)的主要内容,如果未能解决你的问题,请参考以下文章
css Сделатькартинкучбипринаведениеплавночтобыонасталаопятьцветная
php Функцияскачиванияфайла$ b $bПростоотправляемнаурлсобработчиком,передаваяссылкунафайл
scss Анимацияпульсациидляформы$ b $bИдляформыдобавляемперспективу,чтобы3Dбыло
text Вслучаееслинеобходимоконтролироватьадреснуюстрокувпутикоторойуказываетсялокализацияпроектавирту
php быстраяинексациямассива。 однаизнаиболеечастоиспользуемыхфункций。
php быстраяиндексациямассива。 однаизнаиболеечастоиспользуемыхфункций。