Нажав «Загрузить еще» на веб-страницах с помощью Python - PullRequest
5 голосов
/ 09 июля 2019

Я пытаюсь загрузить все содержимое этой ссылки (нажимая на المزيد)

Я пробовал так много учебников, как этот здесь , который учит, какработать с аналогичной проблемой (Infinite Scrolling Pages).

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

<ng-include src="'loader.html'" class="ng-scope">
    <div class="loading-div ng-scope ng-hide" ng-show="!loadingMoreData">
        <div class="spinner">
            <div class="bounce1"></div>
            <div class="bounce2"></div>
            <div class="bounce3"></div>
        </div>
    </div>
</ng-include>
<div class="block-hed block-link clearfix" data-ng-show="isMoreDisplayed" data-ng-click="getMoreMaterials()">
                    <h4 class="link-border-color"><a href="javascript:void(0)">المزيد </a></h4>
                </div>

Мне не обязательно реализовывать какие-либо функции, такие как «click ()» или «execute ()».Любой способ показать весь контент под кнопкой «Загрузить еще» рассматривается.


Кстати, это мой код до сих пор:

from selenium import webdriver
browser = webdriver.Chrome("/home/aziz/anaconda3/lib/python3.6/site-packages/chromedriver/chromedriver")
am = browser.get("https://sabq.org/%D8%A7%D9%84%D9%85%D9%85%D9%84%D9%83%D8%A9/%D8%A5%D9%82%D8%AA%D8%B5%D8%A7%D8%AF")

ОБНОВЛЕНИЕ Я использовал эту ссылку здесь, чтобы решить проблему, но ни одно из руководств не сработало.

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

Ответы [ 2 ]

2 голосов
/ 12 июля 2019

Мне наконец удалось решить проблему.Я только добавил эту строку после моего кода

while True:
    browser.find_elements_by_link_text('المزيد')[1].click()

, и страница начала бесконечно загружать все статьи.Я действительно не знал, что сам المزيد кликабелен.Я думал, что есть ссылка, включенная в это.

1 голос
/ 17 июля 2019

Правильный / лучший способ сделать это - использовать WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
while True:
  element = wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, 'المزيد')))
  element.click()
...