Objective: Find an appointment
Code:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import numpy as np
options = Options()
options.add_argument("--start-maximized")
import time
start = time.process_time()
time.sleep(3)
s = Service(path)
driver = webdriver.Chrome(options=options, service=s)
page = 'https://service.berlin.de/terminvereinbarung/termin/tag.php?\
termin=1&dienstleister=122231&anliegen[]=326798&herkunft=1'
driver.get(page)
time.sleep(5)
driver.refresh()
While the code works, I would like to extend it by making it do auto-refresh every 5 second interval until the element on 9 September 2022 is clickable.
I am thinking of something like
if wait.until(EC.element_to_be_clickable((By.XPATH,
'//*[@id="layout-grid__area--maincontent"] \
/div/div/div[2]/div[2]/div/div/div[5]/div/div[2] \
/div[1]/table/tbody/tr[2]/td[5]'))).click() is False:
time.sleep(5)
driver.refresh()
else:
break
but the second part of the code does not work.
An example of a clickable date is on Nov 4.
Update: Added a while True loop
i=0
while (True):
element = driver.find_element(by=By.XPATH, value='//*[@id="layout-grid__area--maincontent"]\
/div/div/div[2]/div[2]/div/div/div[5]/div/div[2]\
/div[1]/table/tbody/tr[2]/td[5]')
i =1
if "nichtbuchbar" in element.get_attribute("class"):
time.sleep(5)
driver.refresh()
print(f'The {i}\'th try has failed')
I am not sure whether the code above does the job properly, because it seems that every new line is printed in less than 1 second, whereas it is supposed to take a 5 second pause before refresh.
CodePudding user response:
You can check the class name on that element instead, that will give you the same information as is_clickable
, would such a function exist (assuming the red ones are not clickable and the white ones are. If you need a blue one, look at the css class on that one and see if that is in the class name).
if "buchbar" not in element.get_attribute("class"):
time.sleep(5)
driver.refresh()