首页 > 解决方案 > 无法将主页加载到 webscrape 并且下一页不会更改 url

问题描述

我正在尝试从以下位置抓取数据:http : //sekolah.data.kemdikbud.go.id/ 可以通过转到上面的 url 并单击橙色按钮“Cari sekolah”来访问第一个登录页面。 在此处输入图像描述

结果页面具有以下网址:http ://sekolah.data.kemdikbud.go.id/index.php/chome/pencarian/ 。不幸的是,当启动 url 时,结果是一个页面说明找不到指定的 url。

另外,如果当我单击第 2、3 等页面时,url 没有改变,我该如何转到下一页? 在此处输入图像描述

如果你能提供帮助,我的代码到目前为止 - 还没有走远:

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)

标签: pythonselenium

解决方案


诱导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 buttonnext 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

在此处输入图像描述

完整代码:

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

推荐阅读