Selinum Driver ждут, пока SVG будет полностью сто - PullRequest
0 голосов
/ 01 октября 2018

Я использую Selenium с драйвером Chrome для удаления страниц, содержащих SVG.Мне нужен способ заставить Selenium ждать, пока svg полностью не загрузится, в противном случае я получу некоторые неполные графики, когда я откажусь.

На данный момент скрипт ждет 10 секунд, прежде чем он начнет удалять, но это много для очистки 20000 страниц.

 def page_loaded(driver):
        path = "//*[local-name() = 'svg']"
        time.sleep(10)
        return driver.find_element_by_xpath(path)

 wait = WebDriverWait(self.driver, 10)
 wait.until(page_loaded) 

Есть ли эффективный способ проверить, загружен ли SVG перед тем, как начать сбор?

1 Ответ

0 голосов
/ 01 октября 2018

Пример из документации Selenium:

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))

Итак, в вашем случае это должно быть:

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(self.driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, path)))

Здесь 10 в WebDriverWait(driver, 10) - это максимальные секунды ожидания.то есть он ожидает до 10 или условия, в зависимости от того, что будет первым.

Некоторые общие условия, которые часто используются при автоматизации веб-браузеров:

  • title_is title_contains
  • sence_of_element_located
  • visibility_of_element_located visibility_of
  • sence_of_all_elements_located
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value и т. Д. Больше доступно здесь.

Также приведена документация для поддержки ожидаемых условий.

Еще один способ решения этой проблемы - написать метод on, например:

def find_svg(driver):
    element = driver.find_element_by_xpath(path)
    if element:
        return element
    else:
        return False

А затем позвоните Webdriver и подождите как:

element = WebDriverWait(driver, max_secs).until(find_svg)
...