如何在网站上填写包含python请求的文本框

2024-06-28 11:35:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python将latex方程转换为图像。我试过一些转换器,但没有成功。我发现这个网站https://latex2png.com/将为我转换latex字符串,但我不确定如何通过python填充文本框。我知道请求使用http,但我不知道要填写的表单。有人知道怎么做吗

我在inspector中查看表单数据时得到这个结果。 enter image description here


Tags: 数据字符串https图像comhttp表单inspector
2条回答

更新

我只使用requests就知道了如何做到这一点,这更简单、更快:

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'])

注意

如果不使用verfy=False,我会得到以下异常:

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

我已通过浏览器验证证书是否有效。由于禁用证书检查通常不是一种很好的做法,尽管在本例中它似乎相对安全,但我们可以按如下方式添加缺少的证书:

  1. {a1}有使用各种浏览器从网站下载SSL证书的说明。您需要创建一个.pem文件。为此,您需要使用Firefox。还有各种选择。当您进入证书页面时,选择Let's Encrypt Authority X3,然后单击PEM (chain)下载链接。这将在您选择的目录中创建一个文件latex2png-com-chain.pem
  2. 如果源指定了verify=False,则将其替换为verify='/path-to/latex2png-com-chain.pem'

如果这是一个很大的麻烦,这是latex2pmg-com-chain.pem的内容:

  -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  -

使用Selenium和请求

以下是完整的代码:

  1. 使用Selenium清除当前默认的latex配方并输入您选择的配方
  2. 等待生成新的PNG文件
  3. 获取新PNG文件的URL
  4. 使用requests包将PNG文件下载到当前目录中的latex.png

此代码用于驱动Chrome,但您可以为选择的任何浏览器下载驱动程序

Download ChromeDrver

Install Selenium

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()

实际上,你并不想用“人类”的方式来填充这些盒子。 您正在寻找的是向服务器发送POST请求。了解您需要的请求的最简单方法是: 转到站点,在浏览器中打开“网络”选项卡,填充框并单击按钮。检查向POST请求添加的参数类型。检查您收到的响应类型,并从中提取png文件。 然后使用请求在python代码中重新创建POST请求

如果要填充框(请参见填充框的bot),可以使用selenium

相关问题 更多 >