2017-11-24 3 views
0

Ich habe eine HTML-Tabelle mit 5 Spalten. In der dritten Spalte sind Links und in der fünften Spalte ist ein Datum.WebElement mit Timedelta vergleichen

Jetzt möchte ich einen Code schreiben, die überprüfen, ob das Datum innerhalb der nächsten 4 Wochen ist und wenn ja, dann auf den Link klicken

Dies ist, was ich bisher:

# Set the Date 
start = time.strftime('%d-%m-%Y') 
now = datetime.datetime.strptime(start, '%d-%m-%Y') 
date_in_four_weeks = now + datetime.timedelta(days=28) 
project_time = date_in_four_weeks - now 

# Check the date and click on link 
for i in range(project_time.days + 1): 
    print(now + timedelta(days=i)) 
    time = driver.find_element_by_css_selector('css_selector') 
    if time <= project_time: 
     linkList = driver.find_elements_by_css_selector("css_selector") 
     for i in range(0,len(linkList)): 
      links = driver.find_elements_by_partial_link_text('SOLI') 
      links[i].click() 
      driver.get_screenshot_as_file("test.png") 
    else: 
     print "No Project found" 

Wenn ich den Code ausführen, erhalte ich den Fehler:

TypeError: can't compare datetime.timedelta to WebElement

Jetzt möchte ich fragen, ob es eine Möglichkeit gibt, wie ich mein Problem beheben kann?

Thanks :)

+0

Sie haben die 'Time' in Datetime-Objekt zu konvertieren, bevor verglichen wird. –

+0

Danke für die Informationen, aber ich bin neu bei Python, wie kann ich das tun? –

Antwort

0

Es gibt ein paar Punkte, die Sie angehen müssen.

Zunächst vergleichen Sie mit einem WebElement-Objekt, da der Fehler hilfreicherweise darauf hinweist. Dazu gehören die Tags und das HTML-Element, auf das Sie verweisen. Sie möchten zuerst den Text extrahieren.

Dann müssen Sie diesen Text analysieren, um es in ein Python datetime oder date Objekt zu konvertieren. Ein time Objekt wird nicht ausgeführt, da es nur Uhrzeit und nicht Datum speichert. Da ich nicht weiß, in welchem ​​Format sich Ihr HTML-Datum befindet, zeige ich Sie einfach auf the docs, damit Sie sehen können, wie die Typen funktionieren und wie Sie Ihre Daten parsen können.

Schließlich erhalten Sie immer noch einen Fehler, weil Sie versuchen, ein timedelta Objekt mit einem date oder datetime Objekt zu vergleichen. A timedelta ist ein Zeitraum, es bezieht sich nicht auf ein bestimmtes Datum.

Sie können dieses Problem beheben, indem

if time <= project_time:

Mit dem gleichen wie von Ihrer Druckfunktion ersetzen:

if time <= now + timedelta(days=i)