Поисковик Google

Padshii

Client
Регистрация
26.04.2016
Сообщения
124
Благодарностей
9
Баллы
18
Привет всем!Вопрос такой, хочу реализовать клик по рандомному ответу поиска, пример
https://www.google.ru/search?newwindow=1&source=hp&ei=wsQ8W53eDMeisgGWworQCA&q=пример&oq=пример&gs_l=psy-ab.3..0l10.1075.1895.0.2601.7.6.0.0.0.0.68.344.6.6.0....0...1.1.64.psy-ab..1.6.342.0..35i39k1j0i131k1.0.hrYhnvGycHc
чтобы кликал на любую ссылку по поиску с 1 по 10, но проблема в том что так и стабильные теги не нашел с стабильными значениями, всегда разные, пробовал через xpather ни смог подцепить тоже.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
На днях делал себе парсер выдачи гугла. Рабочий xpath для поиска урлов (тайлов сайтов), исключая рекламу:
Код:
//div[@data-async-context]//h3/a
А вот и полный рабочий C#-блок по добавлению текста тайтлов в список зенки (List_Title):
C#:
IZennoList List_Title = project.Lists["List_Title"];

var post0 = instance.ActiveTab.FindElementsByXPath(@"//div[@data-async-context]//h3/a");
var text = "";

if (post0 != null)
{
  foreach(var node in post0)
  {
    text = node.InnerText;
    text = System.Net.WebUtility.HtmlDecode(text).Trim();
    List_Title.Add(text);
  }
}
return text;
 
Последнее редактирование:

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Код:
string link = "https://www.google.com/search?source=hp&ei=pss8W_muHKWe6ASn24pY&q=клик+по+элементу&oq=клик+по+элементу&gs_l=psy-ab.3..0j0i22i30k1l9.23394.26927.0.27106.16.15.0.0.0.0.246.2146.0j14j1.15.0....0...1.1.64.psy-ab..1.15.2135...0i131k1j0i3k1j0i10k1.0.eD7SWvn4iIo";
var rnd = new Random();
////Переходим на целевую страничку
Tab tab1 = instance.ActiveTab;
tab1.Navigate(link);
if (tab1.IsBusy)    tab1.WaitDownloading();

HtmlElement title = tab1.FindElementByXPath("//h3/a", rnd.Next(0,9));
//Если ни одного поста не найдено, выходим из сниппета по красной ветке
if (title.IsNull || title.IsVoid)  {  throw new Exception("Тайтлы не найдены!");}
//Ведём мышку к тайтлу
tab1.FullEmulationMouseMoveToHtmlElement(title);
//Проводим мышкой по тайтлу
tab1.FullEmulationMouseMoveAboveHtmlElement(title, 30);
Thread.Sleep(2000);    //Пауза 2 с
//кликаем по тайтлу
title.Click();
https://zennolab.com/discussion/threads/snippety-ehmuljacii-myshi-fullemulationmouse.35369/
 
  • Спасибо
Реакции: Sergodjan и Padshii

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
orka13, данный код получает текст тайтлов только на текущей странице серпа т.е. на первой?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
orka13, данный код получает текст тайтлов только на текущей странице серпа т.е. на первой?
Да, он же там сам не листает дальше. Если пролистать на вторую, то там та же верстка, и он также сработает.
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Рабочий xpath для поиска урлов (тайлов сайтов), исключая рекламу:
А как ты строишь путь для xpath до нужного контента?

Только начал изучать его, довольно интересная вещь. )
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
А как ты строишь путь для xpath до нужного контента?

Только начал изучать его, довольно интересная вещь. )
Банально зашел в обычном браузере (Опера) на выдачу гугла где есть реклама. Навел на ссылку сайта в выдаче - ПКМ - "просмотреть код элемента". Потом сравнил чем он отличается от рекламной ссылки и сделал xpath так чтобы рекламу не трогало. xpath там же проверяю в консоли оперы, тупо "Сед+F" нажав и вставив туда xpath. Мануалы по xpath здесь выкладывал:
путеводитель для новичков при использовании ZennoPoster+xpath+HtmlAgilityPack+POST\GET
 
  • Спасибо
Реакции: one

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
orka13, данный код получает текст тайтлов только на текущей странице серпа т.е. на первой?
Берет и тайтлы и описание без рекламы
Код:
var dom = instance.ActiveTab.DomText;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
//var doc = new HtmlDocument();
doc.LoadHtml(dom); // создали объект HtmlDocument и загрузили в него html страницу
var nodes = doc.DocumentNode.SelectNodes("//ancestor::div[h3/a]"); // взяли нужные узлы
project.SendInfoToLog("нашли столько узлов:" + nodes.Count.ToString(), true);
var list = new List<string>();
foreach (var node in nodes)
{
    if(!node.InnerHtml.Contains("googleadservices"))//Если не реклама
    {
        var title = node.SelectSingleNode(".//h3").InnerText;
        var desc = node.SelectSingleNode(".//div/span").InnerText;
        list.Add(title + "\r\n" + desc + "\r\n"); // добавил в список "двойную строчку
    }
}
var res = string.Join("\r\n", list); // объединил двойный строчки
return res;
 
  • Спасибо
Реакции: one

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