代码之家  ›  专栏  ›  技术社区  ›  Mohammad Zain Abbas

硒-如何知道下一页是否不存在?

  •  1
  • Mohammad Zain Abbas  · 技术社区  · 6 年前

    Error

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

    这是我的密码:

    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()
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Andersson    6 年前

    只有启用了“下一步”按钮,才能使用更具体的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)]