Внесение изменений с помощью Selenium на веб-странице, и ответ драйвера возвращает то же значение (Scrapy, Python) - PullRequest
0 голосов
/ 04 февраля 2020

На веб-странице, на которой есть кнопка «Показать больше», я щелкаю ее по буквам oop, пока ее больше нет (я могу видеть всю страницу). Теперь мне нужно получить некоторые данные, но я получаю те же данные, что и до нажатия кнопки Показать больше.

Это код, который делает это:

    bodyBefore = response.xpath('/body').get()

    # Click the Show More button till it isn't anymore
    showmore_btn = self.driver.find_elements_by_xpath(
        "//a[@class='event__more event__more--static']")

    while len(showmore_btn) > 0:
        showmore_btn[0].send_keys(Keys.ENTER)
        # Add more time if the previous command doens`t work (Bad internet connection)
        time.sleep(5)
        showmore_btn = self.driver.find_elements_by_xpath(
            "//a[@class='event__more event__more--static']")

    bodyAfter = response.xpath('/body').get()

I не могу получить новый html код для его очистки. (С bodyBefore и bodyAfter я могу легко это доказать)

Кто-нибудь знает, как это сделать?

URL, который я очищаю: https://www.flashscore.com/football/england/premier-league-2018-2019/results/

В этом случае я хочу очистить каждый URL совпадения, который появляется после нажатия кнопки Показать еще

1 Ответ

0 голосов
/ 04 февраля 2020

Сначала необходимо найти основную таблицу, а затем все теги <div>, содержащие строки данных. Затем вы можете l oop на элементы в строке, чтобы получить текстовые данные. Я добавил строку прогресса в l oop, надеюсь, вам понравится:)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import os
import time
import sys


driver = webdriver.Chrome(executable_path =os.path.abspath(os.getcwd()) + "/chromedriver")
driver.get("https://www.flashscore.com/football/england/premier-league-2018-2019/results/")

# extend table
show_more_buttons = driver.find_elements_by_xpath("//a[@class='event__more event__more--static']")
while len(show_more_buttons) > 0:
    show_more_buttons[0].send_keys(Keys.ENTER)
    time.sleep(2)
    show_more_buttons = driver.find_elements_by_xpath("//a[@class='event__more event__more--static']")

# get table and events
table = driver.find_element_by_xpath('//*[@id="live-table"]/div[1]/div/div')
events = table.find_elements_by_class_name('event__match.event__match--static.event__match--oneLine')

# loop over events and collect data
count = 1
data = []
for item in events:
    time = item.find_element_by_class_name('event__time').text
    participant_home = item.find_element_by_class_name('event__participant.event__participant--home').text
    event_scores = item.find_element_by_class_name('event__scores.fontBold').text
    participant_away = item.find_element_by_class_name('event__participant.event__participant--away').text
    event_part = item.find_element_by_class_name('event__part').text
    data.append([time, participant_home, event_scores.replace('\n', ''), participant_away, event_part])
    sys.stdout.write('\r')
    sys.stdout.write("progress: %.2f %%" % ((count/len(events))*100))
    sys.stdout.flush()
    count += 1

for item in data:
    print(item)

Вывод:

['12.05. 16:00', 'Brighton', '1 - 4', 'Manchester City', '(1 - 2)']
['12.05. 16:00', 'Burnley', '1 - 3', 'Arsenal', '(0 - 0)']
..
..
..
['11.08. 16:00', 'Watford', '2 - 0', 'Brighton', '(1 - 0)']
['11.08. 13:30', 'Newcastle', '1 - 2', 'Tottenham', '(1 - 2)']
['10.08. 21:00', 'Manchester Utd', '2 - 1', 'Leicester', '(1 - 0)']
...