2017-03-16 17 views
0

増分の日付リンクを使用して毎回新しいChromeタブを開くループを作成しようとしています - (例:www.biguser.com/31-04-2015)、次にwww.biguserを開きます。 com/01-05-2015 リンクを開くと、標準の.csv形式のダウンロード可能なリンク(Seleniumを使用)をクリックします。だから、私はfind_element _by_partial_link_textと 'csv'のリンクを検索し、そのリンクをクリックします。ここで Pythonの増分日付をループする

のコードだ -

from datetime import timedelta, date 
import selenium.webdriver as webdriver 
import selenium.webdriver.support.ui as ui 
import time 
import urllib2 
import re 
from BeautifulSoup import BeautifulSoup 
from selenium.webdriver.common.keys import Keys 

link_1 = "https://www.biguser.com/date=" #this is part 1 (prefix) of the link 
link_2 = "&section=q" #this part comes after date is put in dd-mm-yyyy format 

driver=webdriver.Chrome() 
#loop for determining the increments in date 
def daterange(start_date, end_date): 
    for n in range(int ((end_date - start_date).days)): 
     yield start_date + timedelta(n) 

start_date = date(2013, 12, 31) #defining my start date 
end_date = date(2015, 12, 31) #defining my end date 

while True: 
#loop begins 
     for single_date in daterange(start_date, end_date): 
      driver.get(link_1+single_date.strftime("%d-%m-%Y")+link_2) #opens the concatenated link 
      driver.find_element_by_partial_link_text('csv').click() #finds 'csv' text and clicks on the link that contains it 
      time.sleep(5) #waits for 5 seconds for everything to settle down 
      driver.get("chrome://newtab/") #opens a new Chrome tab 

とここで私はそれを持っている問題だ ダウンロード可能なファイルは、ページだけでなく、エラーメッセージには「CSV」は存在しないことを意味し、平日のみご利用いただけます「指定された日付のファイルが見つかりません。別の日付を試してください」と表示されます。コードがこれに遭遇するたびに、それは単にプログラムを終了するだけです。

リンクが利用できない場合に備えて「リンクをクリック」イベントをスキップして、次の日付に進むことをおすすめします。ページにhrefまたはタグがありません。

PSは:; Dateクラスは、することができます平日()メソッドを持ってい

答えて

0

)極端な初心者として、私は(私があまりにもあまりにも多くのライブラリをロードしている見ることができるように)様々な実験を介して一緒にこのコードを入れています指定された日付が平日であるかどうかを確認するために使用します。そして、あなたがチェックできる

def is_weekday(date_object): 
    # days 1-5 are weekdays, 6 and 7 are weekends 
    return date.weekday(date_object) in range(1,6) 

:休日のような他の要因がある場合

if is_weekday(<your date here>): 
    ...make the link... 

を、あなたはおそらく、すべてのを予測することはできません私は、if文のために少しのヘルパー関数を作る推薦しますこれらは、私は失敗したブロックアクション(複数可)を囲む除いて/試しをお勧めします:

for single_date in daterange(start_date, end_date): 
    try: 
    driver.get(link_1+single_date.strftime("%d-%m-%Y")+link_2) #opens the concatenated link 
    driver.find_element_by_partial_link_text('csv').click() #finds 'csv' text and clicks on the link that contains it 
    time.sleep(5) #waits for 5 seconds for everything to settle down 
    driver.get("chrome://newtab/") #opens a new Chrome tab 
    except: 
    continue #this will return to the top of the loop and move on to the next link 
+0

私はそれを試みることができるが、一週間内の他の祝日があるので、それは問題は解決しないでしょう。クリック可能なリンクが見つからない場合は、ループを次のリンクに移動する必要があります。私が理解している限り、これは私の論理です。 –