python - 无法将主页加载到 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)
解决方案
诱导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
,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
完整代码:
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
推荐阅读
- python - python中的virtualenv:无法创建完整文件并激活不起作用
- php - 如何在 docker 容器中连接我的主机 mysql?
- python - Python for-loop为字典contact_emails的每次迭代重复输出input()(不是我想要的)
- sql - 根据某列的值从不同行中选择值
- django - Django 多对一
- swiftui - SwiftUI 每次都会重新编译 pod 和所有内容
- asp.net-core - ExceptionFilterAttribute 可能不会在 ApplicationInsights 中记录异常
- python - CSS 属性 Selenium 的值对所有图像返回 None
- apache-kafka - Kafka Connect RetriableCommitFailedException - 采取什么行动
- express - svelte + express(没有工兵) - 如何发送道具/与服务器通信?