当前位置: 首页 > 知识库问答 >
问题:

Selenium以编程方式单击“下一步”按钮,直到最后一页

松翔
2023-03-14

嗨,我是一个网络抓取新手,一直在尝试使用Selenium用python抓取论坛

我想让Selenium点击"下一步",直到最后一页,但我不知道如何打破循环。

当我通过部分链接找到下一个按钮时,自动单击将继续到下一个线程,例如page1-

while True:
    next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Next")))
    next_link.click()

当我按类名找到下一个按钮时,自动单击将在到达最后一页时单击“prev”按钮

while True:
    next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "prevnext")))
    next_link.click()

我的问题是:

  1. 我应该使用哪个定位器?(按类还是按部分链接或任何其他建议?
  2. 如何打破循环,使其在到达最后一页时停止点击?

共有3个答案

邓俊材
2023-03-14

>

  • 您可以使用任何提供唯一标识的定位器。最佳做法按以下顺序排列。

      < li>Id < li >名称 < li >类名 < li>Css选择器 < li>Xpath < li >其他

    当它没有找到您可以使用try block的元素时,从while循环中出来,如下所示。中断命令用于相同的目的。

    while True:
        try:
            next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "prevnext")))
            next_link.click()
        except TimeoutException:
            break
    

  • 杨安歌
    2023-03-14

    您可以使用下面的代码单击“下一步”按钮,直到到达最后一页,如果按钮不存在,则中断循环:

    from selenium.common.exceptions import TimeoutException
    
    while True:
        try:
            WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Next ›"))).click()
        except TimeoutException:
            break
    
    武博艺
    2023-03-14

    您需要考虑以下几点:

    >

  • 页面上有两个元素,文本如下一个在顶部,另一个在底部,因此您需要决定要与哪个元素进行交互并构建独特的定位器策略
  • 继续前进,因为你想要调用元素上的click()而不是预期的条件,因为presence_of_element_located()你需要使用element_to_be_clickable()
  • 当没有文本为 Next 的元素时,您需要执行其余步骤,因此请在 try-catch 块中调用 click() 并在发生异常时发生异常。
  • 根据您的要求,xpath作为定位器策略对我来说看起来不错。
  • 下面是工作代码块:

    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
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get("https://forums.hardwarezone.com.sg/money-mind-210/hdb-fully-paid-up-5744914.html")
    driver.find_element_by_xpath("//a[@id='poststop' and @name='poststop']//following::table[1]//li[@class='prevnext']/a").click()
    while True:
        try :
            WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='poststop' and @name='poststop']//following::table[1]//li[@class='prevnext']/a[contains(.,'Next')]"))).click()
        except :
            print("No more pages left")
            break
    driver.quit()
    

    控制台输出 :

    No more pages left
    

  •  类似资料:
    • 我有一个包含36个按钮的响应网站。乍一看,我们只能看到12个按钮,我需要验证它们的文本值,我知道如何做到这一点。但问题是我需要点击下一步按钮,直到它不可见。那么在c#中如何用selenium来做呢? 此外,在单击“下一步”时,我们需要将按钮的文本存储在一个列表或数组中,这样我就可以将所有列表添加到一个新列表中并进行比较。 看看下面的代码,我试过了。 现在上面的工作正常,但当“下一步”按钮不可用时,

    • 这是我第一个问题的后续问题,我正在尝试抓取一个网站,让Selenium点击(直到无法点击为止)并收集结果。 这是来自网站的html标签,带有按钮: 我试过这个代码: 我也查过这个问题,但还是没能解决。 有什么想法吗?

    • 在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。

    • 我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML:

    • 问题内容: 我正在尝试使用selenium和python 在该特定网站上单击以查看更多信息。这就是我测试的方式,并且出现以下错误 这是可行的: 我想念什么? 问题答案: 这是一个非常简单的运行代码段,该代码段使用XPATH查找按钮“ Se flere”。

    • 问题内容: 我有2个视图控制器,应根据用户输入进行交换。因此,我想根据从文本文件获得的输入以编程方式切换视图。 关于如何以编程方式单击按钮或使用输入加载特定ViewController的任何帮助? 问题答案: 要以编程方式触发事件,您需要致电 - 迅捷3