Selinum Driver等待SVG被完全释放

时间:2018-10-01 09:03:10

标签: python svg web-scraping selenium-chromedriver

我正在将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 :(得分:0)

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或满足条件中的先者。

自动化Web浏览器时经常使用的一些常见条件:

  • title_is title_contains
  • 存在元素的位置
  • visibility_of_element_located可见性_of
  • 存在的所有要素
  • text_to_be_present_in_element
  • text_to_be_present_in_element_value 等等 More available here.

Also here's the documentation for expected conditions support.

解决此问题的另一种方法是编写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)