просто думаю может как-то можно проанализировать, что твит уже пролайкан мною без сохранения его в стоп-листеу него значек сердца меняется. А ты не сохраняешь такие твитты в стоп-лист?
примерно понял куда копатьПрямая ссылка на твит
Лайка нет
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus"
Лайк есть
<div class="tweet permalink-tweet js-actionable-user js-actionable-tweet js-original-tweet retweeted has-cards with-social-proof has-content logged-in js-initial-focus focus favorited"
Твит в ленте
<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content"
<div class="tweet js-stream-tweet js-actionable-tweet js-profile-popup-actionable dismissible-content original-tweet js-original-tweet tweet-has-context retweeted has-cards has-content favorited"
Всем доброго времени суток!
Подскажите пожалуйста как в Твиттере проверить, что твит я уже лайкал?
// ссылка на ретвит = ссылке твита оригинала:
instance.ActiveTab.WaitDownloading();
string Resultat = "";
string ID = "";
short height = 0;
string Inner = "";
var b = instance.ActiveTab.FindElementByXPath("//li[@data-item-type='tweet'][not(.//span[@class='js-retweet-text']) and not(.//span[@class='js-pinned-text'])][.//button]", 0);
if (!b.IsVoid)
{
Inner = b.InnerHtml;
ID = b.GetAttribute("data-item-id");
var b_url = b.FindChildByXPath(".//div[@data-permalink-path]", 0);
string Twit_Url = b_url.GetAttribute("data-permalink-path");
Twit_Url = "https://twitter.com" + Twit_Url;
project.Variables["Twit_Url"].Value = Twit_Url;
var b2 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[contains(@class, 'js-actionFavorite')]", 0);
height = short.Parse(b2.GetAttribute("height"));
if (height>0)
{
//b2.Click();
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b2);
System.Threading.Thread.Sleep(new Random().Next(500,1000)); // пауза
instance.ActiveTab.FullEmulationMouseClick("left", "click");
System.Threading.Thread.Sleep(new Random().Next(1000,2000)); // пауза
}
else
{
project.SendInfoToLog("не лайкаем, а то уже лайкали", true);
}
System.Threading.Thread.Sleep(new Random().Next(1000,5000)); // то пауза 1-5 секунд
var b3 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[@data-modal='ProfileTweet-retweet'][1]", 0);
height = short.Parse(b3.GetAttribute("height"));
if (height>0)
{
//b3.Click();
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b3);
System.Threading.Thread.Sleep(new Random().Next(800,2000)); // пауза
instance.ActiveTab.FullEmulationMouseClick("left", "click");
System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
instance.ActiveTab.WaitDownloading();
var b4 = instance.ActiveTab.FindElementByXPath("//div[@class='tweet-button']/button/span", 0);
//b4.Click();
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b4);
System.Threading.Thread.Sleep(new Random().Next(800,1000)); // пауза
instance.ActiveTab.FullEmulationMouseClick("left", "click");
System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд
instance.ActiveTab.WaitDownloading();
}
else
{
project.SendInfoToLog("не ретвитим, а то уже ретвитали", true);
}
}
return Inner;
а как реализовать на зенке такое действие: перейти в профиль по ссылке, открыть первый твит, скопировать ссылку этого твита... затем перейти ко второму твиту, открыть его, скопировать ссылку и т.д. до 10... как вообще переходить по твитам в твитленте профиля? какие экшены использовать? или тоже только на С# можно реализовать?я там еще чуть правил код, если что то не заработало, то пробуй обновить страницу и сейчас скопировать. Или я не понял твоего поста.
Так тут незачем переходить по твитах, можно банально в коде страницы найти по регулярке нужные ссылки и в список их сбросить.а как реализовать на зенке такое действие: перейти в профиль по ссылке, открыть первый твит, скопировать ссылку этого твита... затем перейти ко второму твиту, открыть его, скопировать ссылку и т.д. до 10... как вообще переходить по твитам в твитленте профиля? какие экшены использовать? или тоже только на С# можно реализовать?
Это что то типа:получается что я в коде страницы нахожу ссылки, кидаю их например в текстовый файл и дальше работаю как со списком? мне хотя бы принципы уяснить )
получается что спарсятся все твиты.. а если твитов в профиле например больше 100 ? шаблон не зависнет?Это что то типа:
парсинг регуляркой в список site:zennolab.com
вставил код, ретвит и лайк не делаетЭто C# код с использованием XPath методов в зенно-браузере и полной эмуляцией движений мышки. Ищет первый незакрепленный именно твит (не ретвит), делает ему лайк и ретвит. Попутно проверяет делали ли мы уже для него такое, если делали, то ничего не делает, а только в лог об этом пишет.C#:// ссылка на ретвит = ссылке твита оригинала: instance.ActiveTab.WaitDownloading(); string Resultat = ""; string ID = ""; short height = 0; string Inner = ""; var b = instance.ActiveTab.FindElementByXPath("//li[@data-item-type='tweet'][not(.//span[@class='js-retweet-text']) and not(.//span[@class='js-pinned-text'])][.//button]", 0); if (!b.IsVoid) { Inner = b.InnerHtml; ID = b.GetAttribute("data-item-id"); var b_url = b.FindChildByXPath(".//div[@data-permalink-path]", 0); string Twit_Url = b_url.GetAttribute("data-permalink-path"); Twit_Url = "https://twitter.com" + Twit_Url; project.Variables["Twit_Url"].Value = Twit_Url; var b2 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[contains(@class, 'js-actionFavorite')]", 0); height = short.Parse(b2.GetAttribute("height")); if (height>0) { //b2.Click(); instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b2); System.Threading.Thread.Sleep(new Random().Next(500,1000)); // пауза instance.ActiveTab.FullEmulationMouseClick("left", "click"); System.Threading.Thread.Sleep(new Random().Next(1000,2000)); // пауза } else { project.SendInfoToLog("не лайкаем, а то уже лайкали", true); } System.Threading.Thread.Sleep(new Random().Next(1000,5000)); // то пауза 1-5 секунд var b3 = instance.ActiveTab.FindElementByXPath("//li[@data-item-id='" + ID + "']//button[@data-modal='ProfileTweet-retweet'][1]", 0); height = short.Parse(b3.GetAttribute("height")); if (height>0) { //b3.Click(); instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b3); System.Threading.Thread.Sleep(new Random().Next(800,2000)); // пауза instance.ActiveTab.FullEmulationMouseClick("left", "click"); System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд instance.ActiveTab.WaitDownloading(); var b4 = instance.ActiveTab.FindElementByXPath("//div[@class='tweet-button']/button/span", 0); //b4.Click(); instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(b4); System.Threading.Thread.Sleep(new Random().Next(800,1000)); // пауза instance.ActiveTab.FullEmulationMouseClick("left", "click"); System.Threading.Thread.Sleep(new Random().Next(2000,5000)); // то пауза 2-5 секунд instance.ActiveTab.WaitDownloading(); } else { project.SendInfoToLog("не ретвитим, а то уже ретвитали", true); } } return Inner;
В переменную project.Variables["Twit_Url"].Value сохраняет ссылку на твит который ми ретвитим.
да, всё помогло... всё заработало ))оно пишет что в проекте не создана переменная ()просто пустая) "Twit_Url". Создайте ее руками.
Поиграйтесь с Xpath путями.а как теперь например сделать два ретвита... в цикл этот код не помогло... установка пустого значения для переменной Twit_Url тоже не помогло...
Хз, алгоритм я бы такой придумал:а есть сниппет, чтобы делал ретвиты твитов не старее 7 дней от текущей?
.//span[@data-time]
Я начинал с безбраузерного C#+Xpath, в браузерном почти то же самое, только чуть больше по правилам зенки оформлено. Но синтаксис самого Xpath одинаковый везде:а как искать Xpath элемента? какие книги посоветуете или ресурсы?