<p><strong>更新</strong></p>
<p>我只使用<code>requests</code>就知道了如何做到这一点,这更简单、更快:</p>
<pre><code>import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import requests
FORMULA = '\\sum _ {i = 1} ^ { m } \\operatorname{log} p ( x ; \\theta)'
data = {
"auth" : { "user" : "guest", "password" : "guest"},
"latex" : FORMULA,
"resolution" : 600,
"color" : "000000"
}
resp = requests.post('https://latex2png.com/api/convert', json=data, allow_redirects=True, verify=False)
results = resp.json()
if results['result-code'] == 0:
url = 'https://latex2png.com' + results['url']
resp = requests.get(url, allow_redirects=True, verify=False)
png = resp.content
with open('latex.png', 'wb') as f:
f.write(png)
print('Image saved.')
else:
print(results['result-message'])
</code></pre>
<p><strong>注意</strong></p>
<p>如果不使用<code>verfy=False</code>,我会得到以下异常:</p>
<pre><code>[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
</code></pre>
<p>我已通过浏览器验证证书是否有效。由于禁用证书检查通常不是一种很好的做法,尽管在本例中它似乎相对安全,但我们可以按如下方式添加缺少的证书:</p>
<ol>
<li>{a1}有使用各种浏览器从网站下载SSL证书的说明。您需要创建一个<code>.pem</code>文件。为此,您需要使用Firefox。还有各种选择。当您进入证书页面时,选择<code>Let's Encrypt Authority X3</code>,然后单击<code>PEM (chain)</code>下载链接。这将在您选择的目录中创建一个文件<code>latex2png-com-chain.pem</code></李>
<li>如果源指定了<code>verify=False</code>,则将其替换为<code>verify='/path-to/latex2png-com-chain.pem'</code></li>
</ol>
<p>如果这是一个很大的麻烦,这是<code>latex2pmg-com-chain.pem</code>的内容:</p>
<pre><code> -BEGIN CERTIFICATE -
MIIFUjCCBDqgAwIBAgISBDNrXu0HGJnfae4oRF0HS1MwMA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQDExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA5MjkxNTA2MTdaFw0yMDEyMjgxNTA2MTdaMBgxFjAUBgNVBAMTDWxhdGV4MnBuZy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUqji1n3TXwlCdLtEM+lhMVvyTk5DP3zM8oS3t/3AdB2qUA1bCj1hYXLzmrF1a7s8xzvyeAqTz9IPMuwfaoVNeDTLpl+KfwjuD99TrrRm6lNUcjrxeN55s7t3TM4T4Oomnn7ve+ldc+9BnnZsQSqvdgwZY6VjgqvB6Pimw1c8hFTq+zUz1uJHIrSpE55sMJTqnfYSWzelvmzIgcSn+mSZLYOlr5z3gN5x3aOgYtTx+aYi4Ns3TEXNR/eqnxzOpMI9P6hZ5UGs0Vi/j6sQQc1nEhhc8ddpxLeGNF0Qj217RzgWQWHiTuc1u+7//q/WQWNrRt4R5lJ9AQoEzRO+7HadHAgMBAAGjggJiMIICXjAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKaJmoHjTE93A7alZiUawAnqaAEkMB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUFBwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNyeXB0Lm9yZy8wGAYDVR0RBBEwD4INbGF0ZXgycG5nLmNvbTBMBgNVHSAERTBDMAgGBmeBDAECATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNlbmNyeXB0Lm9yZzCCAQQGCisGAQQB1nkCBAIEgfUEgfIA8AB2AF6nc/nfVsDntTZIfdBJ4DJ6kZoMhKESEoQYdZaBcUVYAAABdNqdVBoAAAQDAEcwRQIgfP9e7demogIXl0FNaqqil6RMyz60bQEfsAM1jDEtZvgCIQCnvcQ1tC25GX2hRlzrSQZJ+M9Aj/ptzgPKEUeYrtg3mQB2ALIeBcyLos2KIE6HZvkruYolIGdr2vpw57JJUy3vi5BeAAABdNqdU/YAAAQDAEcwRQIgZCI1hyuxD2bnVYhE/AMh7klRGDvuKN2MlSO/K1mKzvACIQCmPglG7ZMWTGSRsUY56KpZG7HcdFonh+ao0vzo0nXEsTANBgkqhkiG9w0BAQsFAAOCAQEAWmNzDoCno1ueQCcMy8usDHUbIdr2gifu5z2LpzDiTdx7gvx2RcojtlgAoxuaTlocwPQSfW21eaq5aDAQ46JaldvGzdsqgPJlIJ91MRyWccHX+AMxxf05PiEKAe4MgLUJSb6+mwmZ0WEaBxZLcKp4vmYHBfOTvja3sOzQSydLSvyQE685f0U+PaoB3uWX2uDpobkwzLF7c7wGEY0mHsmIRBAB5kAyP0MLb2W5pV+M2vuYxVemVq2ah4tYSxc3cSjNS9r5N+A9i69ukIzNzArSXzyhDqbkexL9w2aik3F0gt8G/WgouhjEwBGDAO3YUiYRdvI7khpQTx1/re2Tpm/MXQ==
-END CERTIFICATE -
-BEGIN CERTIFICATE -
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0NlowSjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMTGkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EFq6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWAa6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIGCCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNvbTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9kc3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAwVAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcCARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwuY3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsFAAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJouM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwuX4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlGPfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-END CERTIFICATE -
-BEGIN CERTIFICATE -
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-END CERTIFICATE -
</code></pre>
<p><strong>使用Selenium和请求</strong></p>
<p>以下是完整的代码:</p>
<ol>
<li>使用Selenium清除当前默认的latex配方并输入您选择的配方</李>
<li>等待生成新的PNG文件</李>
<li>获取新PNG文件的URL</李>
<li>使用<code>requests</code>包将PNG文件下载到当前目录中的<code>latex.png</code></李>
</ol>
<p>此代码用于驱动Chrome,但您可以为选择的任何浏览器下载驱动程序</p>
<p><a href="https://chromedriver.chromium.org/downloads" rel="nofollow noreferrer">Download ChromeDrver</a></p>
<p><a href="https://pypi.org/project/selenium/" rel="nofollow noreferrer">Install Selenium</a></p>
<pre><code>from selenium import webdriver
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from selenium.webdriver.common.keys import Keys
import requests
import time
FORMULA = '\\sum _ {i = 1} ^ { m } \\operatorname{log} p ( x ; \\theta)'
options = webdriver.ChromeOptions()
options.add_argument("headless")
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options)
try:
driver.implicitly_wait(3) # wait up to 3 seconds before calls to find elements time out
driver.get('https://latex2png.com/')
# current png url:
url_old = driver.find_element_by_xpath('/html/body/div[4]/div[5]/img').get_attribute('src')
text_area = driver.find_element_by_id('form_latex')
text_area.send_keys(Keys.CONTROL, 'a');
text_area.send_keys(FORMULA)
driver.find_element_by_id('convert_button').click()
t0 = time.time()
while True:
# wait for new png to be generated:
url = driver.find_element_by_xpath('/html/body/div[4]/div[5]/img').get_attribute('src')
if url != url_old:
break
time.sleep(.1)
t1 = time.time()
if t1 - t0 > 10:
raise Exception('Timeout waiting for new png to be generated.')
resp = requests.get(url, allow_redirects=True, verify=False)
png = resp.content
with open('latex.png', 'wb') as f:
f.write(png)
print('Image saved.')
finally:
driver.quit()
</code></pre>