Объявление на странице вызывает проблему "Bad Gateway" для очистки - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь сохранить некоторые веб-страницы в формате PDF с помощью Python, используя pdfkit. На прошлой неделе это работало довольно хорошо (так что, думаю, это не ошибка кодирования мной). Теперь сайт изменил некоторые объявления, что вызывает проблему "Bad Gateway". Я думаю, что это может быть из-за какого-то веб-маяка. Когда 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, но из-за ошибки прерывает цикл, поэтому сохраняется только одна, а не около десяти страниц.

Было бы здорово, если бы кто-нибудь помог мне решить эту проблему.

1 Ответ

0 голосов
/ 02 июля 2019

Хорошо, есть много похожих проблем с 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

...