Невозможно перейти на следующую страницу для просмотра веб-страниц. - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь очистить школьные данные с этого сайта http://sekolah.data.kemdikbud.go.id/ enter image description here

Нажмите кнопку "Cari Sekolah", чтобы go к первому страницу для очистки enter image description here

Не могу найти способ щелкнуть следующую страницу, чтобы загрузить записи с других страниц. URL не изменяется при нажатии следующей страницы. Код HTML для разных страниц выглядит так:

<a href="javascript:void(0)" onclick="paging(2)">2</a>

Вот мой код:

from selenium import webdriver
from selenium.webdriver import Chrome
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time

option = webdriver.ChromeOptions()
option.add_argument('--incognito')
webdriver = "/Users/rainer/Desktop/learnpython/web/chromedriver"
driver = Chrome(executable_path=webdriver, chrome_options=option)

url="http://sekolah.data.kemdikbud.go.id/"
driver.get(url)
WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Cari Sekolah']"))).click()
for i in range(2,15):
    try:
        WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='list']//a[text()='" + str(i) + "']"))).click()
        print("page number #" + str(i))
        time.sleep(1)
    except:
        print("No such element")
        break

1 Ответ

1 голос
/ 02 апреля 2020

Я выполнил ваш код, и он, кажется, работает правильно. URL-адрес страницы не изменяется, но школы, отображаемые на странице, действительно меняются.

Посмотрите, я добавил код для распечатки названий школ:

url="http://sekolah.data.kemdikbud.go.id/"
driver.get(url)
wait = WebDriverWait(driver,15)

wait.until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Cari Sekolah']"))).click()
for i in range(2, 15):
    try:
        wait.until(EC.element_to_be_clickable((By.XPATH, "//ul[@id='list']//a[text()='" + str(i) + "']"))).click()
        print("page number #" + str(i))

        # Print school names to make sure they change per page
        names = driver.find_elements(By.CSS_SELECTOR, 'ul > li.list-group-item:first-child a')
        print([name.text for name in names])
        time.sleep(2) 

    except Exception as e:
        print(e)
        break

Вывод:

page number #2
['(69839180) KELOMPOK BERMAIN KUSUMA HATI', '(K5660869) LKP ALVY', '(20103743) SMKS PGRI 1 JAKARTA', '(20269763) TK MARDI WALUYA']
page number #3
['(69990549) KB GENERASI CERDAS', '(69953341) KB HARAPAN BUNDA', '(P2965122) PKBM TELAGO', '(69930497) SPS ANGGREK']
page number #4
['(69877674) KB WADAH KASIH', '(20567521) TK AISYIYAH BUSTANUL ATHFAL', '(30406867) TK AISYIYAH BUSTANUL ATHFAL 2', '(69734039) TK PGRI TINGGAR']
...

Похоже, что вы все еще можете очистить данные, и все работает как положено.

Надеюсь, это поможет. Пожалуйста, дайте мне знать, если вывод кода отличается от вас. Удачи.

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