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()
更新
我只使用
requests
就知道了如何做到这一点,这更简单、更快:注意
如果不使用
verfy=False
,我会得到以下异常:我已通过浏览器验证证书是否有效。由于禁用证书检查通常不是一种很好的做法,尽管在本例中它似乎相对安全,但我们可以按如下方式添加缺少的证书:
.pem
文件。为此,您需要使用Firefox。还有各种选择。当您进入证书页面时,选择Let's Encrypt Authority X3
,然后单击PEM (chain)
下载链接。这将在您选择的目录中创建一个文件latex2png-com-chain.pem
李>verify=False
,则将其替换为verify='/path-to/latex2png-com-chain.pem'
如果这是一个很大的麻烦,这是
latex2pmg-com-chain.pem
的内容:使用Selenium和请求
以下是完整的代码:
requests
包将PNG文件下载到当前目录中的latex.png
李>此代码用于驱动Chrome,但您可以为选择的任何浏览器下载驱动程序
Download ChromeDrver
Install Selenium
实际上,你并不想用“人类”的方式来填充这些盒子。 您正在寻找的是向服务器发送POST请求。了解您需要的请求的最简单方法是: 转到站点,在浏览器中打开“网络”选项卡,填充框并单击按钮。检查向POST请求添加的参数类型。检查您收到的响应类型,并从中提取png文件。 然后使用请求在python代码中重新创建POST请求
如果要填充框(请参见填充框的bot),可以使用selenium
相关问题 更多 >
编程相关推荐