Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selinum驱动程序等待SVG完全还原_Python_Svg_Web Scraping_Selenium Chromedriver - Fatal编程技术网

Python Selinum驱动程序等待SVG完全还原

Python Selinum驱动程序等待SVG完全还原,python,svg,web-scraping,selenium-chromedriver,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_x

我正在使用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是否已加载

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)))
此处
WebDriverWait(driver,10)
中的
10
是等待的最长秒数。它要等到10点或以先到者为准

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

  • title_是title_包含的内容
  • 元素的存在位置
  • 元素的可见性\u位于元素的可见性\u
  • 存在所有元素
  • 文本在元素中显示
  • 文本在元素值中显示 等

另一种解决方法是在方法上编写,如:

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)

我相信您正在selenium.webdriver.support.ui import WebDriverWait中寻找
,我已经在使用上述函数作为停止等待的条件。代码更新我的代码与您编写的完全相同。它会等待svg出现,但问题是我想等待浏览器呈现它。您编写的代码并没有做到这一点,它只是检查元素是否存在,而不是它是否完全呈现。当我说10秒时,我指的是
时间。睡眠(10)
你的确切用例是什么?也许你应该添加更多的信息,比如html_源代码。这是一个建议。如果svg元素具有一定的高度和宽度,您可以检查它吗?还是按大小?这是个有趣的问题。这里有一个链接可能对您有所帮助。问题在于svg内容,而不是svg标签本身。如果您不等待it内容呈现(每页呈现不同的内容),那么在进行废弃时,您将无法获得正确的内容。您正在尝试下载svg内容吗?如果是这样,则清除
src
属性并从该链接下载。