2017-01-11 15 views
1

いくつかのスクリプトでは、Powershellでwkhtmltopdfを使用して、Webページコンテンツのヘッドレス印刷PDFを作成します。これは、ウィジェットやJavaScriptの複雑さに忙しいウェブサイトを除いて、pdfの印刷出力が混乱している場合を除き、うまく機能します。Powershellを使用してprintSelectedDiv javascriptを使用しているWebページのスクリプトを印刷する

このようなウェブページの1つには、ボタンを印刷して、javascript printSelectedDivを使用しています。これは、Windowsの印刷ダイアログを開き、複雑なページから目的のdivを正確に印刷します。

Powershellを使用して、印刷ジョブをクリックして送信する作業を自動化できます。しかし、いくつかの他のスクリプトのようなスケジュールされたタスクでこれを実行するために、ヘッドレスな方法でしたい。

私はのSendKeysで、次のように印刷を自動化することができるよ:

$ie = new-object -ComObject "InternetExplorer.Application" 
$requestUri = "https://www.complexpagefullofwidgets.com" 
$ie.silent = $true 
$ie.navigate($requestUri) 
while($ie.Busy) { Start-Sleep -Milliseconds 100 } 
$doc = $ie.Document 

$pdfPrinter = Get-WmiObject -Class Win32_Printer | Where{$_.Name -eq "Microsoft Print to PDF"} 
$pdfPrinter.SetDefaultPrinter() | Out-Null 

$printButton = $doc.getElementsByTagName("a") | Where-Object {$_.id -eq "btnPrintList"} 
$printButton.click() 

Start-Sleep -Second 2 

$wshell = New-Object -com WScript.Shell 
$wshell.sendkeys("{ENTER}") 
Start-Sleep -Milliseconds 500 
$wshell.sendkeys("%n") 
Start-Sleep -Milliseconds 500 
$wshell.sendkeys("c:\temp\temp.pdf") 
$wshell.sendkeys("{ENTER}") 

ではなく、キーストロークを送信するこのプロセスのより良いスクリプトコントロールはありますか?私はキーストロークを送っても、スケジュールされたタスクでヘッドレスで確実に動作するかどうかはわかりません。

+0

これらのページをそのまま印刷しようとするとどうなりますか? – FoxDeploy

+0

申し訳ありませんが、私はあなたが何を求めているのかわかりません。 – STWilson

+0

wkhlmtopdfを使用してページを印刷するとどうなりますか? – FoxDeploy

答えて

1

wkhtmltopdfを引き続き使用したい場合は、この方法を使用できます。

あなたのコードは完全に仕事を取得、すべてを行う必要が$ie.Documentに戻って確認あなたはそれ以上に送ることができるように、その後、Body.InnerHTMLオブジェクトは、あなたが要求したページの完全なHTMLを含んでいます、$printButton.click()メソッドを呼び出すことですwkhtmltopdf。

$ie.Document.body.innerHTML > c:\temp\Page.html 
& 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe' c:\temp\page.html c:\temp\page.pdf 

唯一の問題は、画像のURLを解決され、タグ内のURLを交換する必要があるだろう、絶対リンクを相対リンクからそれらを変更、あなたがしているページの完全なURLのために\下塗読み込み中。

+0

私が今朝持っている問題は、 '$ ie.Document'をチェックすることです。クリックして開いたページではなく、同じページです。クリックで開いたページをキャプチャできるようになると解決したら、これが答えになるはずです。 – STWilson

+0

クリックすると開く新しいタブは、about:空白の印刷ダイアログです。 [リンクの画像](https://drive.google.com/file/d/0B5_yG_Yd_HXCdEpXcS14RmlhX2M/view?usp=sharing)ドキュメントにアクセスする方法が見つかりません。 – STWilson

+1

私は問題をあまりにも綿密に見ていました。私がする必要があるのは、必要なdivを一時ファイルに送り、それを印刷することだけです。 '$ doc.getElementById(" divaddetails ")。InnerHtml> c:\ temp \ Page.html' – STWilson

関連する問題