Python:For 循环提前中断 - 为什么?

Python: For Loop breaks to early - Why?

我希望我的代码(见下文)为每个断点截取 5 个屏幕截图。但是在从断点 1280 截取 3 个屏幕截图后,它开始从下一个断点截取屏幕截图。

我做错了什么或错过了什么?

#!/bin/sh

from datetime import datetime
from selenium import webdriver
from pyvirtualdisplay import Display
import time
from selenium.webdriver.chrome.options import Options

now = datetime.now().strftime('%d-%m-%Y_%H-%M-%S')
Breakpoint_1280 = 0
Breakpoint_768 = 0
Breakpoint_320 = 0

# Set Breakpoint for different View
Breakpoints = [1280, 768, 320]

for points in Breakpoints:
    display = Display(visible=0, size=(points, 800))
    display.start()
    driver = webdriver.Chrome('/usr/local/bin/chromedriver')
    driver.set_page_load_timeout(30)
    driver.get('https://www.example.com')
    driver.maximize_window()

    # Taking Screnshoot in different Breakpoints
    if points == 1280:
        for a in Breakpoints:
            Breakpoint_1280 += 1
            print ("Taking %s. Screenshot for Breakpoint 1280" %(Breakpoint_1280))
            driver.get_screenshot_as_file('Breakpoint_1280_Snap%s_%s.png' %(Breakpoint_1280, now))
            time.sleep(10)
            if Breakpoint_1280 == 5:
                break

    elif points == 768:
        for b in Breakpoints:
            Breakpoint_768 += 1
            print ("Taking %s. Screenshot for Breakpoint 768" %(Breakpoint_768))
            driver.get_screenshot_as_file('Breakpoint_768_Snap%s_%s.png' %(Breakpoint_768, now))
            time.sleep(10)
            if Breakpoint_768 == 5:
                break

    else:
        for c in Breakpoints:
            Breakpoint_320 += 1
            print ("Taking %s. Screenshot for Breakpoint 320" %(Breakpoint_320))
            driver.get_screenshot_as_file('Breakpoint_320_Snap%s_%s.png' %(Breakpoint_320, now))
            time.sleep(10)
            if Breakpoint_320 == 5:
                break
    display.stop()

希望有人能帮助我..非常感谢:)

你的循环应该是这样的:

for i in range(0, 5):
    .
    .

使用范围为 5 的 for 循环来完成您的工作。

`对于范围 (5) 中的 a: 做点什么

对于范围 (5) 中的 b: 做点什么

对于范围 (5) 中的 c: 做一点事 `

如评论所述,您正在迭代 Breakpoints,它只有三个元素,因此您有三个屏幕截图。您应该改为使用 for 循环来创建 5 个镜头。 您还可以通过在打印语句和文件名中使用 points 的值来大大简化代码:

from selenium.webdriver.chrome.options import Options

now = datetime.now().strftime('%d-%m-%Y_%H-%M-%S')

# Set Breakpoint for different View
Breakpoints = [1280, 768, 320]

for points in Breakpoints:
    display = Display(visible=0, size=(points, 800))
    display.start()
    driver = webdriver.Chrome('/usr/local/bin/chromedriver')
    driver.set_page_load_timeout(30)
    driver.get('https://www.example.com')
    driver.maximize_window()

    # Taking Screnshoot in different Breakpoints
    for i in range(5):
        print ('Taking {}. Screenshot for Breakpoint {}'.format(i, points))
        driver.get_screenshot_as_file('Breakpoint_{}_Snap{}_{}.png'.format(points, i, now))
        time.sleep(10)

    display.stop()

请注意,我还使用了更新的 format() 字符串格式设置方法。