Нахождение текста, похороненного на веб-странице - PullRequest
3 голосов
/ 12 марта 2019

Я нашел много постов, похожих на мои.Но я перепробовал много предложений, но ничего не получается :(

Веб-страница, которую я пытаюсь почистить, https://m.livesoccertv.com/match/3018992/wolverhampton-wanderers-vs-arsenal/

Редактировать: Каналы перечислены в Международном покрытииВыпадающий

Я хочу получить точный канал, отображаемый на веб-странице со списком частичных каналов в следующей строке

Так как текст, который я имею в списке, не является точнымсоответствует, я не могу заставить работать «содержит»

Я знаю, что мне не хватает небольшого изменения, но это то, где я застрял. Моя переменная t - это то, что удерживает меня. Веб-страницаиспользует мобильную ссылку для меньшей информации о странице

Вот мой код:

desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports' 'ESPN']
channelList = []

t = '//div[contains(@class="fll b_channel_name -broadcast b_trim_inner")]'

for i in range(len(desiredChannels)):
    temp = desiredChannels[i]
    search = browser.find_element_by_xpath(t).text
    if temp in search:
        channelList.append(search)
    print(channelList)

Любая помощь приветствуется

Ответы [ 3 ]

0 голосов
/ 12 марта 2019

Прежде всего, ваш Xpath был немного не прав. Так что я изменил его.

Во-вторых, вы ищете элемент hidden, поэтому вам нужно использовать javaScript executor для получения текста.

В-третьих, у вас всего 79 элементов с одинаковым classname, поэтому я сначала учел количество, а затем перебрал элемент. Тогда только вы получите желаемый результат.

В-четвертых, я добавил webdriverwait на случай, если webdriver потребуется больше времени для идентификации элемента.

Для работы с кодом необходимо иметь imports.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://m.livesoccertv.com/match/3018992/wolverhampton-wanderers-vs-arsenal/')
browser.maximize_window()
desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports', 'ESPN']
channelList = []

t = '//div[@class="fll b_channel_name -broadcast b_trim_inner"]'
#channels=browser.find_elements_by_xpath(t)
channels=WebDriverWait(browser, 30).until(EC.presence_of_all_elements_located((By.XPATH, t)))

for search in channels:
    searchtext=browser.execute_script("return arguments[0].innerHTML;", search)
    for i in range(len(desiredChannels)):
        temp = desiredChannels[i]
        if temp in searchtext:
           channelList.append(searchtext)
print(channelList)

Выход:

['Watch ESPN Brasil']

Надеюсь, это поможет вам.

0 голосов
/ 12 марта 2019

1) Вы должны использовать find_elements_xxxx() для получения всех каналов, а не find_element_xxx(), которые возвращают только первый соответствующий.

2) Вам нужно нажать на «Международное покрытие», чтобы каналы были видны, .text вернуть пустую строку для невидимого элемента.

desiredChannels = ['beIN Sports HD', 'BT Sport', 'Sky Sports', 'ESPN']
channelList = []

// collapse toggle 
collapse_toggle = driver.find_element_by_css_selector('div.int_coverage > a[data-toggle]')

// expand all channels to make them visible, otherwise `.text` return empty string on invisible element
if collapse_toggle.get_attribute('class') == 'collapsed':
    collapse_toggle.click();

channels = driver.find_elements_by_css_selector('div.int_coverage + div div.b_channel_name:not(.-country)')

for channel in channels:

    channelName = channel.text

    for desiredChannel in desiredChannels:

        if channelName.find(desiredChannel) > -1:
            channelList.append(channelName)
            break
0 голосов
/ 12 марта 2019

Я думаю, что пробелы в имени вашего класса вызывают проблему. Попробуйте следующее

t = "div.fll.b_channel_name.-broadcast.b_trim_inner"

for i in range(len(desiredChannels)):
    temp = desiredChannels[i]
    search = browser.driver.find_element_by_css_selector(t).text
    if temp in search:
        channelList.append(search)
    print(channelList)
...