我正在尝试使用pdfkit使用Python将某些网页另存为PDF。上周效果很好(所以,我想这不是我的编码错误)。现在,该网站更改了一些广告,导致“网关错误”问题。我认为可能是由于某些网络信标。 pdfkit尝试将页面另存为PDF时,出现以下错误代码:
Warning: A slow script was stopped
Error: Failed to load https://sync-eu.connectad.io/syncer/1,
with network status code 301 and http status code 502 - Error
downloading https://sync-eu.connectad.io/syncer/1 - server
replied: Bad Gateway
我要保存的页面源代码中的脚本,大概会导致错误:
<script type="text/javascript">
var ss=(function(){var pixelUrls=['https://sync-eu.connectad.io/syncer/1'];var MINS=60*1000;var SMARTSYNC_CALLBACK='serverbidCallBids';var SYNC_COOKIE_TTL=0*MINS;var SYNC_COOKIE='sb_ss';var pixelsInFlight=[];var inSecure=window.location.protocol.indexOf('s')<0;function createPixel(src){var p=document.createElement('iframe');p.setAttribute("height","0px");p.setAttribute("width","0px");p.setAttribute("border","0");p.setAttribute("frameBorder","0");p.setAttribute("style","position:absolute;");p.onerror=function(){return this.style.display="none";};p.setAttribute("src",src);if(window[SMARTSYNC_CALLBACK]){p.onload=function(){var i=pixelsInFlight.indexOf(src);if(i>=0){pixelsInFlight.splice(i,1);}
if(!pixelsInFlight.length){window[SMARTSYNC_CALLBACK]();}};pixelsInFlight.push(src);}
document.body.appendChild(p);}
function createCookie(){if(document.cookie.indexOf(SYNC_COOKIE)<0){var date=new Date();date.setTime(date.getTime()+ SYNC_COOKIE_TTL);return(document.cookie=SYNC_COOKIE+"; expires="+ date.toUTCString()+"; path=/"||1);}}
if(createCookie()){for(var i=0;i<pixelUrls.length;i++){var pixelUrl=pixelUrls[i];if(inSecure||pixelUrl.match(/^https:/)){createPixel(pixelUrl);}}}else if(window[SMARTSYNC_CALLBACK]){window[SMARTSYNC_CALLBACK]();}});var waitForDOM=function(evt){if(evt.target.readyState==="interactive"){ss();}}
document.addEventListener('readystatechange',waitForDOM,false);
</script>
问题是pdfkit保存了PDF,但是由于该错误,它会中止循环,因此只保存了一页而不是大约十个页面。
如果有人能帮助我解决这个问题,那就太好了。
答案 0 :(得分:0)
好吧,wkhtmltopdf也有很多类似的问题,如git所报道:https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2051
我现在的解决方案是简单地关闭所有JavaScript。对于许多用户来说,这不是一个好的解决方案。但是,如果有人像我一样被卡住,则值得尝试:
import pdfkit
path2wkthmltopdf = r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe" #replace path
pdfconfig = pdfkit.configuration(wkhtmltopdf=path2wkthmltopdf)
options = {'encoding': "UTF-8",'disable-javascript': None}
pdfkit.from_url(your_url, your_path2save, configuration=pdfconfig, options=options)
wkhtmltopdf的其他选项可以在https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
上找到