暂停Python For循环一天

时间:2016-03-15 17:50:53

标签: python selenium selenium-webdriver

我的情况是这样的:我使用Selenium Webdriver来抓取一个网页,首先它获取了total_page_items这是一个简单的部分,因为页面顶部有一个数字框。

我想知道的是每天只与其中的200件商品互动。 让我们说例如页面有500万个项目,我如何每天点击200个这样的项目,可能将按钮状态保存到列表,然后第二天继续接下来的200个项目? 我知道计时功能以及如何在特定时间每天运行脚本,但我不知道如何从那里移动。这是我会使用嵌套循环的情况吗?

这是我到目前为止的for循环,我希望它有意义

    daily_items = 200
    counter = 0
    ButtonXpathList = [
          "//div[@id='content']/div/div/div[2]/div/div/ul/li[",
                               1,
                               "]/div/div[3]/button [contains(text(), 'Click')]"
     ]



    for i in range(0, daily_items):

        ButtonXpathList[1]  = ButtonXpathList[1] + (1) #Counts up the string
        ButtonXpathString = "".join(str(x) for x in ButtonXpathList)
        ButtonElement = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, (ButtonXpathString))))
        action.move_to_element(ButtonElement)

        if "Click" in ButtonXpathString: # and ButtonElement.is_displayed():
            ButtonElement.click()
            counter += 1
            print counter, "New Buttons Clicked"
        else:
            driver.execute_script("return arguments[0].scrollIntoView();", ButtonElement)
        time.sleep(2)

    if ButtonXpathList[1] == total_page_items:
        print "You're done here"

2 个答案:

答案 0 :(得分:0)

您可以使用芹菜http://www.celeryproject.org/

创建任务

答案 1 :(得分:0)

我建议你使用APScheduler。我做了类似的东西,每天早上需要运行一次的刮板。 APScheduler易于使用:

from apscheduler.schedulers.background import BackgroundScheduler    

scheduler = BackgroundScheduler()
scheduler.start()
scheduler.add_job(yout_routine, 'interval', days=1)

您还可以使用小时和分钟间隔:

scheduler.add_job(yout_routine, 'interval', hours=24)

docs:https://apscheduler.readthedocs.org/en/latest/