为了账号安全,请及时绑定邮箱和手机立即绑定

解析链接时无法继续点击下一页按钮

解析链接时无法继续点击下一页按钮

一只斗牛犬 2021-11-16 16:53:23
我已经在 python 中结合 selenium 编写了一个脚本来单击search按钮以填充结果,然后ya_result-item从其登录页面解析类中的不同链接,然后继续单击下一页按钮,同时解析来自其他页面的链接,直到有没有更多的按钮可以点击。但是,我的脚本只能从它的第一页解析链接,然后单击下一页按钮一次,但随后卡住了。如何让我的脚本在解析链接时一直点击下一页按钮?这是我的尝试:from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECurl = "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:breakif __name__ == '__main__':    driver = webdriver.Chrome()    wait = WebDriverWait(driver,10)    get_page_content(driver,url)
查看完整描述

2 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我打印出异常,它说元素不可点击。除了点击它,另一种方法是使用send_keys("\n")模拟链接点击。

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

我试过了,我能够导航到所有页面。


查看完整回答
反对 回复 2021-11-16
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

如果您想抓取数据,则不需要 Selenium。您可以使用requestspackage 更快地获取 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)


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 230 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信