C #: Селен: Как найти элемент по отношению к внутреннему тексту другого элемента - PullRequest
0 голосов
/ 11 мая 2018

Я только начал изучать Selenium WebDriver и столкнулся с несколькими проблемами.Я много гуглил, но безуспешно.

Итак, я собираюсь написать парсер сайта.

Существует разновидность HTML.
представление браузера и html

<div class="view-wrapper"> включены <ul class="sport--list"> и включают список <li class="sport--block">...</li>

Я пытаюсь проверить каждый класс спортивных блоков в цикле и нашел раздел, который включает в себя ключевое слово, например, "Футбол"

Футбол

Затем, когда я нашел правильный раздел, я собираюсь получить значение нестатического таймера и затем записать его в файл.Это мой следующий шаг.Прежде всего, я должен решить свою первую проблему:

таймер

Основная проблема заключается в том, что существует множество элементов div.Как я могу найти подходящий?Я написал этот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;

namespace Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var driver = new ChromeDriver())
            {
                // Go to the home page
                driver.Navigate().GoToUrl("https://www.favorit.com.ua/ru/live/");
                // Get the page elements
                IList<IWebElement> ClassNamesElements = driver.FindElements(By.ClassName("sport--block"));
                for (int i = 0; i < ClassNamesElements.Count; i++)
                {
                    Console.WriteLine(ClassNamesElements[i]);
                    Console.ReadLine();
                }
            }  
        }
    }
}

Но я не знаю, как настроить следующее условие для выбора.Как «Где включает в себя что-то вроде Футбол».И после этого я хочу работать только с частью HTML, соответствующей моему правильному виду спорта - блок

Я не могу использовать XPath элементов, потому что сайт не статичен.И правильный спортивный блок может появиться со случайным положением.

Мне не нужно, чтобы вы писали код вместо меня.Мне просто нужно какое-то направление, чтобы продолжить поиск в Google.

Я выбрал правильный способ решения этой задачи (C # + Selenium)?Пожалуйста, дайте мне несколько подсказок или подсказок.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Чтобы извлечь значение нестатического таймера для нескольких ключей в тегах <li class="sport--block">...</li>, так как таких тегов <li> несколько, вы можете написатьфункция, которая примет значение ключа в качестве аргумента string и напечатает соответствующее время.

  • Функция:

    public void print_key_timer(string myKey)
    {
        string myTime = driver.FindElement(By.XPath("//ul[@class='sport--list']//li[@class='sport--block']/div[contains(@class,'sport--head')]//span[.='" + myKey + "']//following-sibling::ul[1]//ul[@class='events--list']//div[@class='event--head']//div[@class='time--block']/div[@class='event--timer']")).GetAttribute("innerHTML");
        Console.WriteLine(myTime);
    }
    
  • Теперь вы можете вызывать функцию столько раз, сколько пожелаете, из любой точки вашей программы:

    print_key_timer("Футбол")
    
0 голосов
/ 11 мая 2018

Попробуйте этот код:

for (int i = 0; i < ClassNamesElements.Count; i++){

   if(ClassNamesElements[i].GetText().Contains("Футбол")){ 
      Console.WriteLine(ClassNamesElements[i].GetText());
      Console.ReadLine();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...