簡體   English   中英

解析鏈接時無法繼續單擊下一頁按鈕

[英]Can't keep clicking on the next page button while parsing the links

我用python與硒結合編寫了一個腳本,單擊“ search按鈕以填充結果,然后從其登錄頁面解析ya_result-item類的不同鏈接,然后繼續單擊下一頁按鈕,同時解析其他鏈接直到沒有更多按鈕可點擊為止。

但是,我的腳本只能解析第一頁中的鏈接,然后單擊下一頁按鈕一次,但隨后卡住了。

網站連結

在解析鏈接時,如何使腳本繼續單擊下一頁按鈕?

這是我的嘗試:

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

url = "https://www.yogaalliance.org/Directory?Type=School"

def get_page_content(driver,link):
    driver.get(link)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.ya_directory-search-button"))).click()
    while True:
        for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[id^='ya_result-item'] a[href^='/SchoolPublicProfile']"))):
            print(item.get_attribute("href"))

        try:
            wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[title*='next page']"))).click()
            wait.until(EC.staleness_of(item))
        except Exception:break

if __name__ == '__main__':
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    get_page_content(driver,url)

我打印出異常,它說元素不可單擊。 除了點擊它,還可以使用send_keys("\\n")模擬鏈接點擊。

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[title*='next page']"))).send_keys("\n")

我嘗試了一下,然后可以導航到所有頁面。

如果您想抓取數據,則無需硒。 您可以使用requests包更快地獲取json格式的所有信息。

下面的代碼收集所有學校的詳細信息,作為result的地圖列表:

import requests

data = {
    'take': '10',
    'skip': '0',
    'page': '1',
    'pageSize': '10',
    'pageIndex': '0'
}
url = 'https://www.yogaalliance.org/DesktopModules/YAServices/API/SchoolDirectory/SearchSchools'
response = requests.post(url, data=data)

result = response.json()["Result"]
totalCount = response.json()["TotalCount"]
totalCount = int(totalCount / 10)

for i in range(1, totalCount):
    data['skip'] = int(data['skip']) + 10
    data['page'] = i + 1
    data['pageIndex'] = i
    response = requests.post(url, data=data)
    result.extend(response.json()["Result"])

print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM