Невозможно загрузить главную страницу в webscrape, а следующая страница не меняет URL - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь очистить данные от: http://sekolah.data.kemdikbud.go.id/ Доступ к первой целевой странице можно получить, перейдя по указанному выше URL-адресу и нажав оранжевую кнопку "Cari sekolah". enter image description here

Полученная страница имеет следующий URL: http://sekolah.data.kemdikbud.go.id/index.php/chome/pencarian/. К сожалению, когда URL-адрес запущен, в результате страница не может быть найдена.

Кроме того, как мне go перейти на следующие страницы, если при нажатии на 2-ю, 3-ю и т. Д. c страницы URL-адрес не изменяется? enter image description here

Благодарен, если вы можете помочь, мой код до сих пор - далеко не ушел:

from selenium import webdriver
from selenium.webdriver import Chrome
import pandas as pd

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/index.php/chome/pencarian/'

driver.get(url)

1 Ответ

2 голосов
/ 01 апреля 2020

Индуцируйте WebDriverWait () и ждите element_to_be_clickable ()

WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.XPATH,"//button[text()='Cari Sekolah']"))).click()

Импортируйте следующие библиотеки.

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

Как только вы достигнете страницы next, вам нужно щелкните каждый page button до go next page. Для приведенного мной примера диапазон до 15 страниц можно увеличить.

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, 10).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

enter image description here

Полный код:

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

option = webdriver.ChromeOptions()
option.add_argument('--incognito')
driver=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, 30).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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...