Невозможно сделать скрытую часть веб-страницы активной, используя селен в python - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь использовать селен в python для извлечения данных из AllTrails.com/us/florida/state-parks. Мне нужны данные о записях. Когда вы впервые открываете сайт, он выглядит так, как показано на картинке ниже, с активными «отзывами».

Визуализация веб-страницы

Код html для интересующей части: :

веб-страница HTML

Прямо сейчас вы можете видеть в html, что «обзоры» активны (мне нужны активные записи)

Когда я физически нажимаю на «записи», он активирует записи, но когда я пытаюсь виртуально «щелкнуть» по нему селеном, он не выдает ошибки, но он не активируется, и последующие части кода не будут работать . Соответствующая часть моего кода приведена ниже:

def get_trail_links (driver, trails_url):
    time.sleep(1)
    driver.get(trails_url)
    page_count = 0

#here is where i am trying to click on the "recordings" button, no error happens here.
    driver.find_element_by_xpath("//h3[a/@name='Recordings']").click()

    recordings = driver.find_elements_by_xpath("//*[@id ='tracks']")
    while page_count < 2:
        for record in recordings:

#here is where my button won't work because the recordings is not active in the html.

            button = driver.find_element_by_xpath("//button[@title='Show more recordings']")
            button.click()
            time.sleep(1)
            page_count += 1

1 Ответ

0 голосов
/ 29 мая 2020

Используйте этот код. Также вы можете изменить количество нажатий кнопки, изменив значение в while l oop.

import time

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome(executable_path= r"D:\Selenium Learning\chromedriver_win32 (2)\chromedriver.exe")
driver.get('https://www.alltrails.com/us/florida/state-parks')


wait = WebDriverWait(driver, 5000)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class,'row trail-row')]/div/div[3]")))
driver.find_element_by_xpath("//div[contains(@class,'row trail-row')]/div/div[3]").click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[@id='tracks']/div[1]/div[1]/div[2]/div[1]/div[1]/h4")))


page_count=0
while page_count < 2:
    button = driver.find_element_by_xpath("//button[@title='Show more recordings']")
    button.click()
    time.sleep(1)
    page_count += 1
recordings = driver.find_elements_by_xpath("//*[@id='tracks']/div/div/div/div/div/h4")
for recording in recordings:
    print(recording.text)

PS: Во время выполнения измените путь исполняемого файла на локальный chrome путь к драйверу.

Пожалуйста, примите ответ, если это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...