2016-03-15 45 views
0

我的情況是這樣的:我使用Selenium Webdriver來抓取一個網頁,首先它獲得了total_page_items,這很容易,因爲頁面頂部有一個數字框。暫停Python for Loop一天

我想要知道的是每天只與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" 
+0

我不會繼續腳本運行,並暫停了一天。我可能會將這些項目寫入一個文件,然後每天運行一個腳本,從該文件中提取200個項目並執行任何操作。你意識到如果你有5M物品,每天做200個,你說的是68.5年來完成這個任務,對吧? :) – JeffC

+0

謝謝傑夫,我錯過了你的文章,但我也想出了這個更聰明的方法。我現在成功地寫作和閱讀紡織品,它完美的作品!大約68.5歲,我還年輕,不急着! – jorvd

回答

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) 

文檔:https://apscheduler.readthedocs.org/en/latest/