使用python单击网页上的“加载更多”

时间:2019-07-08 22:04:53

标签: python html python-3.x web selenium-webdriver

我正在尝试加载此link的全部内容(单击المزيد)

我尝试了很多类似here的教程,其中讲解了如何处理类似的问题(无限滚动页面)。

我的问题是我无法在此页面上指定加载更多类以单击它。但是,如果我没记错的话,它存在于网页源代码的这一部分:

<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()”或“ perform()”之类的任何功能。可以考虑采用任何方式在“更多负载”按钮下显示全部内容。


顺便说一下,这是我到目前为止的代码:

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")

更新 我在这里使用此link来解决此问题,但是所有教程均无效。

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 个答案:

答案 0 :(得分:2)

我终于设法解决了这个问题。我刚刚在代码后添加了这一行

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

,页面开始无限加载所有文章。我真的不知道المزيد本身是可点击的。我以为其中包含一个链接。

答案 1 :(得分:1)

正确/更好的方法是使用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()