【问题标题】:Selenium ChromeDriver "get" doesn't reliably load @import fontsSelenium ChromeDriver “get” 不能可靠地加载 @import 字体
【发布时间】:2021-04-04 23:31:42
【问题描述】:

我有几个这样的 HTML 页面:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>@import url(https://fonts.googleapis.com/css?family=Droid+Serif:400,700,400italic); 
body { font-family: 'Droid Serif'; }</style>
</head>
...

使用 Selenium 加载页面时:

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--kiosk-printing')
browser = webdriver.Chrome(r"chromedriver.exe", options=chrome_options)
browser.get("http://www.example.com/")

然后:

  • 50% 的情况下,字体没有加载(页面显示为默认衬线字体(可能是 Times New Roman))
  • 50% 的时间加载字体

如何使用 Selenium 使字体加载更可靠?

即使使用 time.sleep(2); browser.get(...) 第二次重新加载页面也没有 100% 的帮助。

【问题讨论】:

  • 这个运气好吗?很失望一年后遇到这个问题,却发现没有答案。
  • @user7290573 随意开始 50 或 100 点的赏金(我经常在这种情况下这样做,这很有帮助)。

标签: python selenium selenium-webdriver fonts selenium-chromedriver


【解决方案1】:

我偶然发现了这个 Web API (https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet)。

试试这个代码:


from selenium import webdriver
import time

u = 'https://fonts.google.com/'
driver = webdriver.Chrome(executable_path=r"chromedriver.exe")
driver.maximize_window()
driver.get(u)

while True:
    script = '''return document.fonts.status;'''
    loaded = driver.execute_script(script)
    if loaded == 'loaded':
        print('All fonts loaded')
        break
    print('Fonts still loading')
    time.sleep(.5)

必须说,在我的情况下,只有当页面完全加载(包括字体)时,chrome 才会将控件返回给 selenium。 也许你可以提供一个最小的例子来测试你的 50-50 场景

【讨论】:

  • 这对我有用,但只有在我在脚本中注释掉 options.add_argument('--headless') 之后。看起来(至少在我的情况下)Chrome 只下载“真正”可见的网络字体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2017-08-22
  • 1970-01-01
相关资源
最近更新 更多