корректный цикл экранирования после корректно подобранного синтаксического анализа html

#python #selenium #parsing

#python #selenium #синтаксический анализ

Вопрос:

Я сравниваю хэш-значения html-страницы для обнаружения новой активности, я настроил триггер, и он работает хорошо, но у меня возникают проблемы с выходом из цикла, как только он обнаруживает новую активность, и это не триггер.

Мне сказали, что это простая проблема, но я не знаком с циклами.

Итак, у меня есть

 if myhash == myhash2:  # match hashes to detect site change
  print('[-]No Change Detected on '   str(url2)   "")
  time.sleep(4)

if myhash != myhash2:
  status_string = '[!]New hash',""
  

Сравнение состояний сайта по хэш-значению

 mysplitpokemon = (target_element.text.split("!pokemon", 1)[1])
  

Сопоставление моего триггерного слова и извлечение слова после него.

 driver = webdriver.Firefox()
driver.get("http://www.qwerty.com")
  

Продолжайте что-то делать со значениями..

Я полагаю, что с этого момента я неправильно выполняю цикл, мне это нужно, чтобы избежать вложенного цикла восстановления mysplitpokemon и вернуться к if myhash == myhash2 , но сохранить значение mysplitpokemon до следующего запуска основного цикла. Но вместо этого webdriver просто открывает бесконечные экземпляры, и ему не удается сопоставить текст после !pokemon

итак, мой цикл

 while True:
  # first page request
  while 1:
    # second request to the same page
    try:
      # match the hashes
      if myhash == myhash2:
        something()
      if myhash != myhash2:
        continue
      while True:
        parseFunction()
        postFunction()
        break
  

Комментарии:

1. Я не вижу циклов в вашем коде. Пожалуйста, вносите обновления

2. Ваш отступ в коде, содержащем циклы, кажется выключенным (т. Е. После try инструкции нет отступа). Кроме того, это должно быть continue вместо continue() . docs.python.org/3/tutorial / … может быть тем, что вы ищете.

3. Я пытался исправить ваши проблемы с отступами, насколько я понимаю, пожалуйста, пересмотрите эти изменения. Однако в своем текущем состоянии try оператор не служит никакой цели. Также, по крайней мере, для меня не совсем ясно, чего вы пытаетесь достичь. Попробуйте подробнее остановиться на этом. Что вы считаете «основным циклом» и «вложенным циклом» — всего три вложенных цикла и четыре цикла. В каком цикле вы «извлекаете mysplitpokemon «? В настоящее время это неясно, потому что вы опустили это в своей окончательной демонстрации кода.

4. Извините, но я заплатил парню, чтобы решить это, и это тоже его некоторое время, так что, конечно, это была непростая проблема. Он пошел и записал хэш-значения в файл, а затем прочитал файл, что я мог бы сделать сам, но я пытаюсь избежать избыточного кодирования. tl; dr проблема решена, спасибо за усилия

Ответ №1:

                 else:
                pass
        except Exception as ex:
            print(ex)
            driver.quit()
            pass
  

Дважды экранируйте цикл при правильной обработке ошибок.