У меня возникли проблемы с созданием программы, которая автоматизирует процесс оформления заказа. Я использую python 3 вместе с Selenium. Программа анализирует диапазон дат, которые выводятся на страницу как доступные четыре доступных слота. Если ни одна из них не доступна на текущей странице, она нажмет кнопку «Далее» и выполнит поиск следующих четырех дат. Если он достигнет конца доступных диапазонов дат и ничего не найдет, он подождет тридцать секунд, перезагрузится и все сделает заново.
Я выполнил большую часть этого, за исключением двух проблем:
1) Я пытаюсь добавить аргумент, который, если он будет включен, выйдет за пределы go базовой функциональности (который должен просто уведомить пользователя с помощью текста, используя Twilio), и завершить полный процесс проверки.
Это код python, который я использую:
def find_available(args):
dates_available = True
spaces_free = False
free_spaces = ""
while not spaces_free:
while dates_available:
time.sleep(1.5)
spots = driver.find_elements_by_css_selector('.ss-carousel-item')
for spot_index, spot in zip(range(date_range), spots):
if spot.value_of_css_property('display') != 'none':
spot.click()
available_dates = driver.find_elements_by_css_selector('.Date-slot-container')
for available_date in available_dates:
if available_date.value_of_css_property('display') != 'none':
selected_spot = available_date.find_element_by_css_selector('#slot-container-UNATTENDED')
if 'No doorstep delivery' not in selected_spot.text:
free_spaces = selected_spot.text.replace('Select a time', '').strip()
spaces_free = True
else:
print(selected_spot.text.replace('Select a time', '').strip())
if spaces_free:
print('Slots Available!')
if args.checkout:
client.messages.create(to=to_mobilenumber,
from_=from_mobilenumber,
body=free_spaces)
driver.find_element_by_xpath("//*[contains(text(), 'Soonest available')]").click()
time.sleep(1.5)
driver.find_element_by_xpath("//input[@type='submit' and @value='Continue']").click()
print('Your order has been placed!')
else:
client.messages.create(to=to_mobilenumber,
from_=from_mobilenumber,
body=free_spaces)
print('Your order time will be held for the next hour. Check your date and confirm!')
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="auto-checkout")
parser.add_argument('--checkout', '-c', action='store_true',
help="Select first available slot and checkout")
args = parser.parse_args()
find_available(args)
Ожидаемое поведение
Если программа запускается с использованием аргумента '--checkout' или '- c', то, если для параметра space-free установлено значение true, она должна отправить текст с текстом внутри элемента 'free_spaces'. Затем он должен перейти к следующему этапу, который будет выбором радиокнопки, содержащей текст «Soonest available» (как при выборе первой доступной радиокнопки, содержащей доступный временной интервал), и затем нажать кнопку «Продолжить». .
Фактическое поведение
Программа запустится, найдет доступный временной интервал, затем просто перейдет к следующим дням, никогда не пытаясь выбрать переключатель и переместить вперед в процессе оформления заказа.
Что я делаю не так?
Буду признателен за любую помощь.