This script helps you book a covid vaccine appointment on Zocdoc
// ==UserScript==
// @name ZocDoc Covid Vaccine Script
// @namespace https://greasyfork.org/users/754006
// @version 1.2
// @description This script helps you book a covid vaccine appointment on Zocdoc
// @author Antoine Carpentier
// @match https://www.zocdoc.com/*
// @grant none
// ==/UserScript==
var i;
function Vaccine()
{
console.log("Initiating Script.")
var loaded = document.getElementsByClassName("htzklx-11 hskUir")[0];
if (loaded)
{
console.log ("Location list loaded.")
var bookinglocation = document.getElementsByClassName("yglqz4-2 fNAZIY sc-32axb7-4 jRvRQu"); //location buttons
if (bookinglocation.length > 0)
{
for (i=0; i < bookinglocation.length; i++)
{
var specificLocation = bookinglocation[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.firstElementChild.firstElementChild.firstElementChild.lastElementChild.firstElementChild.firstElementChild.title
if (specificLocation.includes(""))
{
console.log("Found the specified location.");
bookinglocation[i].click();
BookingTime();
return;
}
}
console.log("Specified location not available. Refreshing page.")
setTimeout(function(){location.reload()}, 1500);
}
else
{
console.log("No available location. Refreshing page.")
setTimeout(function(){location.reload()}, 1500);
}
}
else
{
var fbbutton = document.getElementsByClassName("Button__StyledButton-yglqz4-2 iAUbwA BaseSocialLoginButtonTransparent__StyledButton-rwqyb7-2 uExfa FacebookLoginButtonTransparent__StyledLoginButton-sc-1rfzugu-1 bpqSZg PatientInfoPageView__StyledFacebookLoginButton-iezlhj-2 bsRKPK")[0]
if (fbbutton)
{
console.log("Logging into Facebook.")
fbbutton.click()
}
else
{
var radiobutton = document.getElementsByClassName("textbox__Input-f9jwpk-1 ieYGhk exclude-from-playback")
if (radiobutton[0])
{
document.getElementsByClassName("Radio__RadioContainer-sc-12d437a-5 jZkvmS YesNoRadioGroup__StyledRadio-sc-1g3yb7j-0 dkcNqu")[0].click()
document.getElementsByClassName("Radio__RadioContainer-sc-12d437a-5 jZkvmS YesNoRadioGroup__StyledRadio-sc-1g3yb7j-0 dkcNqu")[2].click()
document.getElementsByClassName("Radio__RadioContainer-sc-12d437a-5 jZkvmS YesNoRadioGroup__StyledRadio-sc-1g3yb7j-0 dkcNqu")[4].click()
for (i=0; i < radiobutton.length; i++)
{
if(radiobutton[i].parentElement.parentElement.firstElementChild.textContent.includes("physician"))
{
document.getElementsByClassName("textbox__Input-f9jwpk-1 ieYGhk exclude-from-playback")[i].value = "None";
var event = new Event('input', { bubbles: true });
document.getElementsByClassName("textbox__Input-f9jwpk-1 ieYGhk exclude-from-playback")[i].dispatchEvent(event);
}
}
setTimeout(function(){document.getElementById("BookApptButton").click()},1000);
console.log("Finalizing booking");
setTimeout(function()
{
var noavailability = document.getElementsByClassName("NoAvailabilityView__NoAvailabilityText-sc-54izdc-0 kmDGZM")[0]
if (noavailability && noavailability.innerText == "No upcoming appointments available.")
{
console.log("Appointment no longer available. Back to the location list.");
setTimeout(function(){location.replace("https://www.zocdoc.com/vaccine/search/IL?flavor=state-search");},1000);
}
else
{
var anotheravailability = document.getElementsByClassName("AppointmentInfoForm__NoticeText-mo1ykz-3 cUIguP")[0]
if(anotheravailability && anotheravailability.innerText == "The appointment time you selected is no longer available.")
{
console.log("Appointment no longer available. Back to the location list.");
setTimeout(function(){location.replace("https://www.zocdoc.com/vaccine/search/IL?flavor=state-search");},1000);
}
else
{
console.log("Looks good?")
}
}
},2500);
}
else
{
setTimeout(Vaccine,500);
}
}
}
}
Vaccine();
function BookingTime()
{
var availableappointment = document.getElementsByClassName("cuhhzo-3 gMYWbC skiptranslate")[0]
var noappointment = document.getElementsByClassName("sc-54izdc-0 dDeVvC")[0]
if (availableappointment)
{
console.log("Appointment available at selected location!");
availableappointment.click();
}
else if (noappointment)
{
console.log("No available appointments at selected location - Refreshing page.")
location.reload();
}
else
{
setTimeout(BookingTime,500);
}
}