【问题标题】:Selenium - How to know if next page doesn't exist?Selenium - 如何知道下一页是否不存在?
【发布时间】:2019-01-26 16:59:13
【问题描述】:

我正在尝试从 IBM 服务页面获取所有服务标题,但出现以下错误:

我想知道下一页是否存在。所以,我可能会打破循环。或者让我的循环保持这么多的迭代。

这是我的代码:

import time
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

def writefile(links):
    with open('url_list.txt', 'w') as file:
        file.writelines("%s\n" % link for link in links)

start_url = "https://www.ibm.com/us-en/products/categories?size=30&selectedTopicRoot=technologyTopics&types[0]=service"
links = []
chrome_path = r"C:\Users\IBM_ADMIN\Anaconda3\selenium\webdriver\Chrome\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get(start_url)
time.sleep(15)

while True:
    time.sleep(5)
    results = driver.find_elements_by_class_name("offering--name")

    for i in range(len(results)):
        links.append(results[i].text)

    writefile(links)

    try:
        next = driver.find_element_by_xpath('//*[@id="IBMAccessibleItemComponents-next"]')
        if (next.is_enabled()):
            next.click()
        else:
            break
    except NoSuchElementException:
        break

driver.close()

【问题讨论】:

  • 也许等待元素可点击:stackoverflow.com/a/28110129/977593?
  • @slackmart 不,我不是在等待元素可点击。我想通过查看下一个按钮是否可点击来查看下一页是否存在。

标签: python selenium selenium-chromedriver


【解决方案1】:

只有启用后,您才能使用更具体的 XPath 来选择下一步按钮:

try:
    driver.find_element_by_xpath('//*[@id="IBMAccessibleItemComponents-next" and not(@aria-disabled)]').click()
except NoSuchElementException:
    break

请注意,在最后一页上,aria-disabled="true" 添加到了“下一步”按钮的属性中,因此它不会被 //*[@id="IBMAccessibleItemComponents-next" and not(@aria-disabled)] XPath 匹配

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多