Я пытаюсь автоматизировать Google Maps с помощью драйвера Python Selenium Chrome, мой код стабилен, чтобы получить то, что мне нужно, , но не время производительности.
Я использую итеративный код для получения данных о продавцах через Google Карты, скорость получения 1 данных о продавце ниже 1 секунды при использовании Selenium, но когда код обнаружил исключение, это займет очень много времени, например 6-7секунд.
Вот некоторые итоги времени выполнения:
https://picoolio.net/image/dgxC (нормальное время выполнения)
https://picoolio.net/image/dgxT (время выполнения при исключениипроизошло в открытый час, слишком долго)
https://picoolio.net/image/dgxV (время выполнения, когда возникла исключительная ситуация, иногда запускается, как ожидается)
Вот некоторый код для получения списка открытых часов:
try:
openhour = wait(driver, 1).until(EC.visibility_of_element_located((By.XPATH,
'.//span[@class="section-open-hours-button maps-sprite-pane-info-arrowup"]')))
driver.execute_script("arguments[0].scrollIntoView(true);", openhour)
openhour.click()
openhourstacked = wait(driver, 1).until(EC.visibility_of_element_located((By.CLASS_NAME,
'section-open-hours-container-hoverable'))).get_attribute("aria-label")
openhourlist = openhourstacked.split(",")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1].split(".")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1][0]
except NoSuchElementException:
openhourlist = []
print("No Open Hour list in this merchant!")
openhour_trig = True
except WebDriverException:
openhourlist = []
print("Failed to load Open Hour list in this merchant!")
openhour_trig = True
Множество рекомендаций говорят, что для правильного выполнения явного ожидания я должен использовать комбинацию WebDriverWait и EC (ожидаемые условия), и я попытался сделать это напрямую с приведенным выше кодом, но WebDriverWait, похоже, не работаетдля всех входящих исключений, другими словами, иногда успешно, а иногда - неудачно.
Я пытался заменить EC.visibility_of_all_element_located
на EC.presence_of_all_element_located
, но это не имеет значения.
IОжидается, что время выполнения будет по-прежнему плавным, когда возникнет какое-либо исключение, есть ли способ заставить Selenium прекратить поиск элементов в случае тайм-аута, кроме описанного выше способа?Или это проблема с интернет-соединением?Любые мысли приветствуются!
Обновление: поэтому я изменяю открытый часовой код на что-то вроде этого
try:
if len(driver.find_elements(By.XPATH, './/span[@class="section-open-hours-button maps-sprite-pane-info-arrowup"]'))>0:
openhour = wait(driver, 5).until(EC.visibility_of_element_located((By.XPATH,
'.//span[@class="section-open-hours-button maps-sprite-pane-info-arrowup"]')))
#openhour = driver.find_element_by_xpath('.//span[@class="section-open-hours-button maps-sprite-pane-info-arrowup"]')
driver.execute_script("arguments[0].scrollIntoView(true);", openhour)
openhour.click()
#openhourstacked = driver.find_element_by_class_name('section-open-hours-container-hoverable').get_attribute("aria-label")
openhourstacked = wait(driver, 5).until(EC.visibility_of_element_located((By.CLASS_NAME,
'section-open-hours-container-hoverable'))).get_attribute("aria-label")
openhourlist = openhourstacked.split(",")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1].split(".")
openhourlist[len(openhourlist) - 1] = openhourlist[len(openhourlist) - 1][0]
else:
openhourlist = []
print("No Open Hour list in this merchant! (Not an Exception)")
except NoSuchElementException:
openhourlist = []
print("No Open Hour list in this merchant!")
openhour_trig = True
except WebDriverException:
openhourlist = []
print("Failed to load Open Hour list in this merchant!")
openhour_trig = True
Да, таким образом, это действительно позволяет избежать исключения, но это повторяетвыполняйте поиск, как и раньше, поэтому он может дать длительный поиск до 6-7 секунд снова, когда элементы не найдены .. явное ожидание тоже не очень помогает в этих терминах, я думаю