python - "While True Loop"不会导致函数再次执行

标签 python selenium web-scraping while-loop beautifulsoup

问题的标题几乎是不言自明的。我目前正在运行以下代码:

from selenium import webdriver
from bs4 import BeautifulSoup
import time
import datetime

url = "http://www.val-de-marne.gouv.fr/booking/create/4963/1"
cookie_banner_selector = "#cookies-banner a:nth-child(2)"
guichet_21 = "//input[@value='5955'][@name='planning']"
guichet_22 = "//input[@value='5968'][@name='planning']"
guichet_24 = "//input[@value='5973'][@name='planning']"
booking_selector = "//input[@value='Etape suivante'][@name='nextButton']"
guichet_buttons = [guichet_21, guichet_22, guichet_24]
name_guichet = ["guichet 21", "guichet 22", "guichet 24"]
guichet_buttonsandnames = zip(guichet_buttons, name_guichet)

browser = webdriver.Safari()
browser.maximize_window()
browser.get(url)
time.sleep(5)
cookie_banner = browser.find_element_by_css_selector(cookie_banner_selector)
browser.execute_script("arguments[0].click();", cookie_banner)
time.sleep(5)


def availability_checker():
    for i, j in guichet_buttonsandnames:
        guichet_selection = browser.find_element_by_xpath(i)
        guichet_selection.click()
        time.sleep(5)
        booking_submit = browser.find_element_by_xpath(booking_selector)
        booking_submit.click()
        innerHTML = browser.execute_script("return document.body.innerHTML")
        soup = BeautifulSoup(innerHTML, 'lxml')
        alert = soup.find('form', id='FormBookingCreate')
        alert_text = alert.text
        message = alert_text.strip()
        if message == "Il n'existe plus de plage horaire libre pour votre demande de rendez-vous. Veuillez recommencer ultérieurement.":
            print("No available appointments in %s" % j)
            time.sleep(5)
            browser.back()
            browser.refresh()
        else:
            print("Appointment available in %s! Hurry and complete the form!" % j)
            break


while True:
    print("Checking for appointment availabilty on %s" % datetime.datetime.now())
    availability_checker()
    print("Checking complete on %s" % datetime.datetime.now())
    time.sleep(20)
    browser.refresh()

目的是让函数 availability_checker() 每 20 秒重新启动一次。

第一次迭代进行得很顺利,因为我确实收到了关于我正在查看的三个展位是否可以预约的通知。然而,一旦 20 秒结束,我得到的只是 print() 消息,就好像函数没有再次运行一样。

您能否阐明正在发生的事情以及我该如何解决?

提前致谢。

最佳答案

使用 zip() 将为您提供一个生成器,并且只产生一次结果。 您可以通过更改轻松解决问题:

guichet_buttonsandnames = zip(guichet_buttons, name_guichet)

收件人:

guichet_buttonsandnames = tuple(zip(guichet_buttons, name_guichet))

关于python - "While True Loop"不会导致函数再次执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55111460/

相关文章:

python - 如何使用 Python 将文件上传到 Soundcloud?

python - 使用 Python 使用 Selenium 设置 chromedriver 代理身份验证

java - 循环逻辑在 java selenium 中未按预期工作

python - 无法在两个类之间建立桥梁

java - 使用 jsoup 选择不重要的 div 标签

python - 如何扩展 forms.datetime 字段中现有的输入格式?

python - 子图的 matplotlib get_color

python - Selenium:WebDriverException:Chrome无法启动:由于google-chrome不再运行而崩溃,因此ChromeDriver认为Chrome已崩溃

javascript - 重定向时获取og信息

ios - 输入文字后无法按回车键