我正在将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是否已加载?
答案 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浏览器时经常使用的一些常见条件:
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)