Очистка ссылок селеном - PullRequest
0 голосов
/ 30 мая 2020

Я работал, чтобы очистить ссылки на статьи на веб-сайте. Но обычно, когда сайт был загружен, он отображает только 5 статей, тогда для отображения большего количества статей требуется нажать кнопку «Загрузить больше». Источник Html содержит только ссылки на первые пять статей.

Я использовал селен python для автоматизации нажатия кнопки «Загрузить больше», чтобы полностью загрузить веб-страницу со всеми списками статей.

Вопрос в том, как можно Я извлекаю ссылки на все эти статьи.

После полной загрузки сайта селеном я попытался получить html исходный код с помощью driver.page_source и распечатать его, но все же в нем есть только ссылка на первые 5 статей.

Я хочу получить ссылки на все те статьи, которые были загружены на веб-страницу после нажатия кнопки «Загрузить еще».

Пожалуйста, помогите найти решение.

1 Ответ

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

Возможно, ссылки появятся через какое-то время, а ваш код выполняет driver.source_code до обновления исходного кода. Вы можете выбрать ссылки с помощью Selenium после явного ожидания, чтобы убедиться, что ссылки, динамически добавляемые на веб-страницу, полностью загружены. Трудно сформулировать то, что вам нужно, без ссылки на ваш источник, но (в Python) это должно быть что-то похожее на:

from selenium.webdriver.support.ui import WebDriverWait

def condition(driver):
    """If the selector defined in the function retrieves 10 or more results, return the results.
    Else, return None.
    """
    selector = 'a.my_class' # Selects all <a> tags with the class "my_class" 
    els = driver.find_elements_by_css_selector(selector)
    if len(els) >= 10:
        return els

# Making an assignment only when the condition returns a truthy value when called (waiting until 2 min):
links_elements = WebDriverWait(driver, timeout=120).until(condition)
# Getting the href attribute of the links 
links_href = [link.get_attribute('href') for link in links_elements]

В этом коде вы:

  • Постоянно ищите нужные элементы, пока их не будет 10 или больше. Вы можете сделать это с помощью CSS Selector (как в примере), XPath или другим методом . Это дает вам список объектов Selenium, как только условие wait возвращает объект со значением True, до определенного времени ожидания. Подробнее о явных ожиданиях см. В документации . Вы должны сделать соответствующее условие для вашего случая - возможно, ожидание определенного количества ссылок нехорошо, если вы не уверены, сколько ссылок будет в конце.
  • Извлечение того, что вы хотите, из объекта Selenium . Для этого используйте соответствующий метод для элементов в списке, полученном на шаге выше.
...