มีวิธีการจับภาพหน้าจอของเว็บไซต์ใน PHP แล้วบันทึกลงในไฟล์หรือไม่?
มีวิธีการจับภาพหน้าจอของเว็บไซต์ใน PHP แล้วบันทึกลงในไฟล์หรือไม่?
คำตอบ:
แก้ไขล่าสุด : หลังจาก 7 ปีฉันยังคงได้รับ upvotes สำหรับคำตอบนี้ แต่ผมคิดว่าอันนี้คือตอนนี้ความแม่นยำมากขึ้น
แน่นอนคุณสามารถทำได้ แต่คุณจะต้องแสดงหน้าเว็บด้วยบางสิ่ง หากคุณต้องการใช้ php จริงๆฉันขอแนะนำให้คุณHTMLTOPSซึ่งแสดงหน้าและแสดงผลในไฟล์ ps (ghostscript) จากนั้นแปลงเป็นไฟล์. jpg, .png, .pdf .. อาจช้าลงเล็กน้อยด้วย หน้าเว็บที่ซับซ้อน (และไม่สนับสนุน CSS ทั้งหมด)
มิฉะนั้นคุณสามารถใช้wkhtmltopdfเพื่อส่งออกหน้า html ใน pdf, jpg หรืออะไรก็ได้ .. ยอมรับ CSS2.0 ใช้ webkit (wrapper ของซาฟารี) เพื่อแสดงหน้า .. ดังนั้นควรจะดี คุณต้องติดตั้งบนเซิร์ฟเวอร์ของคุณเช่นกัน ..
อัปเดตทันทีด้วยคุณลักษณะใหม่ของ HTML5 และ JS สามารถแสดงหน้าเป็นวัตถุแคนวาสโดยใช้ JavaScript นี่เป็นห้องสมุดที่น่าทำ: Html2Canvasและนี่คือการดำเนินการโดยผู้เขียนคนเดียวกันเพื่อรับข้อเสนอแนะเช่น G + เมื่อคุณแสดง dom เป็นผืนผ้าใบแล้วคุณสามารถส่งไปยังเซิร์ฟเวอร์ผ่าน ajax และบันทึกเป็น jpg
แก้ไข : คุณสามารถใช้เครื่องมือ imagemagick สำหรับการแปลงไฟล์ PDF เป็น png รุ่นของฉัน wkhtmltopdf ไม่รองรับภาพ convert html.pdf -append html.png
เช่น
แก้ไข : สคริปต์เปลือกขนาดเล็กนี้ให้ตัวอย่างง่ายๆ / แต่การใช้งานทำงานบน linux กับ php5-cli และเครื่องมือที่กล่าวถึงข้างต้น
แก้ไข : ฉันสังเกตเห็นแล้วว่าทีม wkhtmltopdf กำลังทำงานในโครงการอื่น: wkhtmltoimage ที่ให้ jpg กับคุณโดยตรง
ตั้งแต่ PHP 5.2.2 เป็นไปได้ที่จะจับเว็บไซต์ด้วย PHP เท่านั้น !
imagegrabscreen - จับทั้งหน้าจอ
<?php
$img = imagegrabscreen();
imagepng($img, 'screenshot.png');
?>
imagegrabwindow - ดึงหน้าต่างหรือพื้นที่ไคลเอ็นต์โดยใช้ตัวจัดการ windows (คุณสมบัติ HWND ในอินสแตนซ์ COM)
<?php
$Browser = new COM('InternetExplorer.Application');
$Browserhandle = $Browser->HWND;
$Browser->Visible = true;
$Browser->Fullscreen = true;
$Browser->Navigate('http://www.stackoverflow.com');
while($Browser->Busy){
com_message_pump(4000);
}
$img = imagegrabwindow($Browserhandle, 0);
$Browser->Quit();
imagepng($img, 'screenshot.png');
?>
แก้ไข: หมายเหตุฟังก์ชั่นเหล่านี้มีอยู่ในระบบ Windows เท่านั้น!
หากคุณไม่ต้องการใช้เครื่องมือของบุคคลที่สามฉันได้พบกับโซลูชันง่ายๆที่ใช้Google Page Insight api
จำเป็นเพียงเพื่อเรียกมันว่าของ API กับ screenshot=true
params
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=https://stackoverflow.com/&key={your_api_key}&screenshot=true
สำหรับมุมมองผ่านเว็บไซต์โทรศัพท์มือถือ&strategy=mobile
ใน params,
https://www.googleapis.com/pagespeedonline/v1/runPagespeed?
url=http://stackoverflow.com/&key={your_api_key}&screenshot=true&strategy=mobile
คุณสามารถใช้เบราว์เซอร์แบบหัวขาดง่ายๆเช่น PhantomJS เพื่อคว้าหน้า
นอกจากนี้คุณสามารถใช้ PhantomJS กับ PHP
ลองดูสคริปต์ php ตัวเล็ก ๆ ที่ทำสิ่งนี้ ดูที่นี่https://github.com/microweber/screen
และนี่คือ API- http://screen.microweber.com/shot.php?url=/programming/757675/website-sc Screenshots-using-php
สิ่งนี้จะดีสำหรับคุณ:
ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดการกระจาย wkhtmltoimage!
ใช่. คุณจะต้องมีสิ่งที่ต้องการ:
ดูkhtmld (aemon)ใน * nx ดูUrl2Jpgสำหรับ Windows แต่เนื่องจากเป็นแอพ dotNet คุณก็ควรที่จะ chek Url2Bmp
ทั้งสองเป็นเครื่องมือคอนโซลที่คุณสามารถใช้ประโยชน์จากเว็บแอปของคุณเพื่อรับภาพหน้าจอ
นอกจากนี้ยังมีบริการเว็บไซต์ที่ให้บริการ ตรวจสอบนี้ออกตัวอย่างเช่น
แก้ไข:
นี้การเชื่อมโยงเป็นประโยชน์ในการ
มันอยู่ใน Python แต่คุณสามารถดูเอกสารและรหัสได้อย่างชัดเจน หากคุณสามารถใช้งาน python ได้มันเป็นโซลูชั่นสำเร็จรูปสำหรับคุณ:
โปรดทราบว่าทุกอย่างสามารถทำงานบนเครื่องหนึ่งเครื่องสำหรับแพลตฟอร์มเดียวหรือเครื่องหนึ่งที่มีเครื่องเสมือนที่ใช้งานแพลตฟอร์มอื่น
ฟรีโอเพนซอร์สเลื่อนไปที่ด้านล่างของหน้าสำหรับลิงก์ไปยังเอกสารรหัสแหล่งที่มาและข้อมูลอื่น ๆ
ใช่แล้ว. หากคุณต้องการภาพของ URL ลองสิ่งนี้
<img src='http://zenithwebtechnologies.com.au/thumbnail.php?url=www.subway.com.au'>
ส่ง URL เป็นอาร์กิวเมนต์แล้วคุณจะเห็นภาพเพื่อดูรายละเอียดเพิ่มเติมได้ที่ลิงค์นี้http://zenithwebtechnologies.com.au/auto-thumbnail-generation-from-url.html
PhantomJS เป็นเบราว์เซอร์ที่สามารถติดตั้งบนเซิร์ฟเวอร์และรวมเข้ากับ php ได้อย่างง่ายดาย คุณสามารถค้นหารหัสได้ใน WDudes มีคุณสมบัติเพิ่มเติมมากมายเช่นการระบุขนาดรูปภาพแคชดาวน์โหลดเป็นไฟล์หรือแสดงใน img src เป็นต้น
<img src=”screenshot.php?url=google.com” />
พารามิเตอร์ URL
ความกว้างและความสูง: screenshot.php? url = google.com & w = 1,000 & h = 800
ด้วยการครอบตัด: screenshot.php? url = google.com & w = 1,000 & h = 800 & clipw = 800 & cliph = 600
ปิดใช้งานแคชและโหลด screesnhot ใหม่:
screenshot.php? url = google.com & cache = 0
ในการดาวน์โหลดภาพ: screenshot.php? url = google.com & download = true
คุณสามารถดูบทช่วยสอนได้ที่นี่: จับภาพหน้าจอของเว็บไซต์โดยใช้ PHP โดยไม่มี API
cutycapt บันทึกหน้าเว็บเป็นรูปแบบภาพส่วนใหญ่ (jpg, png .. ) ดาวน์โหลดจาก synaptic ของคุณมันทำงานได้ดีกว่า wkhtmltopdf
ฉันใช้หน้าจอ microweberเพื่อจับภาพหน้าจอของหน้าเว็บใด ๆ ที่นี่เราสามารถหาบทช่วยสอนที่เขียนได้ดี ง่ายกว่าและไม่ควรใช้เวลานานกว่า 3 นาทีในการเรียนรู้
ในที่สุดฉันก็ตั้งค่าโดยใช้microweber / screenตามที่เสนอโดย @boksiora
เริ่มแรกเมื่อพยายามลิงก์ที่กล่าวถึงที่นี่สิ่งที่ฉันได้รับ:
Please download this script from here https://github.com/microweber/screen
ฉันอยู่บน Linux ดังนั้นหากคุณต้องการเรียกใช้คุณสามารถปรับขั้นตอนตามสภาพแวดล้อมของคุณ
นี่คือขั้นตอนที่ฉันทำบนเชลล์ในDOCUMENT_ROOT
โฟลเดอร์:
$ sudo wget https://github.com/microweber/screen/archive/master.zip
$ sudo unzip master.zip
$ sudo mv screen-master screen
$ sudo chmod +x screen/bin/phantomjs
$ sudo yum install fontconfig
$ sudo yum install freetype*
$ cd screen
$ sudo curl -sS https://getcomposer.org/installer | php
$ sudo php composer.phar update
$ cd ..
$ sudo chown -R apache screen
$ sudo chgrp -R www screen
$ sudo service httpd restart
screen/demo/shot.php?url=google.com
เบราว์เซอร์ของคุณเพื่อ เมื่อคุณเห็นภาพหน้าจอคุณทำเสร็จแล้ว การสนทนาสำหรับการตั้งค่าล่วงหน้าเพิ่มเติมสามารถดูได้ที่นี่และที่นี่ที่นี่
มีโครงการโอเพนซอร์สมากมายที่สามารถสร้างภาพหน้าจอได้ ตัวอย่างเช่น PhantomJS, webkit2png เป็นต้น
ปัญหาใหญ่ของโครงการเหล่านี้คือพวกเขาใช้เทคโนโลยีเบราว์เซอร์รุ่นเก่าและมีปัญหาในการแสดงผลเว็บไซต์จำนวนมากโดยเฉพาะไซต์ที่ใช้ webfonts, flexbox, svg และส่วนเพิ่มเติมอื่น ๆ ในข้อมูลจำเพาะ HTML5 และ CSS ในช่วงสองสามเดือน / ปีที่ผ่านมา
ฉันได้ลองใช้บริการของบุคคลที่สามแล้วและส่วนใหญ่ใช้ PhantomJS ซึ่งหมายความว่าพวกเขายังผลิตภาพหน้าจอที่มีคุณภาพต่ำ บริการที่ดีที่สุดของบุคคลที่สามสำหรับการสร้างภาพหน้าจอเว็บไซต์เป็นurlbox.io เป็นบริการชำระเงินแม้ว่าจะมีการทดลองใช้ฟรี 7 วันเพื่อทดสอบโดยไม่ต้องทำตามแผนชำระเงินใด ๆ
นี่คือลิงค์ไปยังเอกสารประกอบและด้านล่างเป็นขั้นตอนง่าย ๆ เพื่อให้ทำงานกับ PHP กับผู้แต่ง
// 1 . Get the urlbox/screenshots composer package (on command line):
composer require urlbox/screenshots
// 2. Set up the composer package with Urlbox API credentials:
$urlbox = UrlboxRenderer::fromCredentials('API_KEY', 'API_SECRET');
// 3. Set your options (all options such as full page/full height screenshots, retina resolution, viewport dimensions, thumbnail width etc can be set here. See the docs for more.)
$options['url'] = 'example.com';
// 4. Generate the Urlbox url
$urlboxUrl = $urlbox->generateUrl($options);
// $urlboxUrl is now 'https://api.urlbox.io/v1/API_KEY/TOKEN/png?url=example.com'
// 5. Now stick it in an img tag, when the image is loaded in browser, the API call to urlbox will be triggered and a nice PNG screenshot will be generated!
<img src="$urlboxUrl" />
ตัวอย่างเช่นนี่คือภาพหน้าจอเต็มความสูงของหน้านี้:
มีตัวเลือกมากมายและพวกเขาล้วนมีข้อดีและข้อเสีย นี่คือรายการตัวเลือกที่เรียงลำดับตามความยากในการใช้งาน
ข้อดี
จุดด้อย
ข้อดี
จุดด้อย
ข้อดี
จุดด้อย
ข้อดี
จุดด้อย
ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้ก่อตั้ง ApiFlash ฉันทำอย่างดีที่สุดเพื่อให้คำตอบที่ซื่อสัตย์และมีประโยชน์
webkit2html ทำงานบน Mac OS X และ Linux ค่อนข้างง่ายในการติดตั้งและใช้งาน ดูบทช่วยสอนนี้นี้
สำหรับ Windows คุณสามารถไปกับCutyCaptซึ่งมีฟังก์ชั่นที่คล้ายกัน
ผมใช้bluga API ช่วยให้คุณสามารถถ่ายภาพได้ 100 ครั้งต่อเดือนโดยไม่ต้องจ่าย แต่บางครั้งก็ใช้เครดิตมากกว่า 1 หน้าสำหรับหน้าเดียว ฉันเพิ่งอัพเกรดโมดูล drupal เสร็จสิ้นBluga WebThumbsเป็น drupal 7 ซึ่งอนุญาตให้คุณพิมพ์รูปย่อในเทมเพลตหรือตัวกรองอินพุต
ข้อได้เปรียบหลักของการใช้ api นี้คือช่วยให้คุณสามารถระบุขนาดเบราว์เซอร์ในกรณีที่คุณใช้ css ที่ปรับตัวได้ดังนั้นฉันจึงใช้มันเพื่อรับการเรนเดอร์สำหรับเลย์เอาต์มือถือและแท็บเล็ต
มีลูกค้า API สำหรับภาษาต่อไปนี้:
PHP , Python , Ruby , Java , .Net C # , Perl และBash (เชลล์สคริปต์ดูเหมือนว่าต้องใช้ Perl)
ทุกอย่างขึ้นอยู่กับวิธีที่คุณต้องการถ่ายภาพหน้าจอ
คุณสามารถทำได้ผ่าน PHP โดยใช้เว็บเซอร์เพื่อรับภาพให้คุณ
grabz.it มีเว็บเซอร์วิซให้ทำเช่นนี้ต่อไปนี้เป็นบทความที่แสดงตัวอย่างง่ายๆของการใช้บริการ
คุณสามารถใช้วิธีแก้ปัญหาhttps://grabz.it
มันมี PHP API ซึ่งมีความยืดหยุ่นสูงและสามารถเรียกได้หลายวิธีเช่นจาก cronjob หรือเว็บเพจ PHP
ในการใช้งานคุณจะต้องได้รับรหัสแอปและความลับและดาวน์โหลดก่อน SDK (ฟรี)
และเป็นตัวอย่างสำหรับการนำไปใช้ การเริ่มต้นครั้งแรกของทั้งหมด:
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
$grabzIt = new GrabzItClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
และตัวอย่างหน้าจอ:
// To take a image screenshot
$grabzIt->URLToImage("http://www.google.com");
// Or to take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// Or to convert online videos into animated GIF's
$grabzIt->URLToAnimation("http://www.example.com/video.avi");
// Or to capture table(s)
$grabzIt->URLToTable("http://www.google.com");
ถัดไปคือการบันทึกคุณสามารถใช้หนึ่งในสองวิธีการบันทึกSave
ถ้าจัดการการโทรกลับเข้าถึงสาธารณะและSaveTo
ถ้าไม่ ตรวจสอบเอกสารสำหรับรายละเอียด
ฉันเขียนแอปที่รวดเร็วและสกปรกเมื่อวันก่อนโดยใช้ Google API ขอบเขตแน่นอนที่สุดสำหรับการปรับปรุง ...
หาได้ที่นี่มีการสาธิตสดและรหัส
ฉันไม่ได้โพสต์รหัสที่นี่เพียงเพราะฉันปรับแต่งและหวังว่าเมื่อฉันมีเวลาแปลงเป็นคลาสที่เหมาะสม
หลังจากการท่องเว็บฉันพบสิ่งนี้มากมาย
PPTRAAS > เครื่องมือฟรีในการจับภาพหน้าจอโดยส่ง URL ของคุณเป็นพารามิเตอร์
พวกเขามีหลายตัวเลือกเพียงแค่กดปุ่ม URL
รับภาพหน้าจอแบบเต็ม
https://pptraas.com/sc Screenshot?url= {YOU URL ที่นี่}
รับภาพหน้าจอหน้าเว็บที่มีขนาดเฉพาะ
https://pptraas.com/scurrency?url= {YOU URL ที่นี่} & size = 400,400
หนึ่งสามารถแปลงหน้าเป็น pdf
https://pptraas.com/pdf?url= {YOU URL ที่นี่}
คุณสามารถทำ 2 สิ่ง
ใช้ Puppeteer
คุณสามารถใช้แพ็คเกจ PHP Puppeteer ได้เพื่อหมุนเบราว์เซอร์และจับภาพหน้าจอ
ใช้ API
มี API สกรีนช็อตจำนวนมาก คุณสามารถดูScreenshotAPI.netเป็นตัวอย่างได้ (ข้อจำกัดความรับผิดชอบฉันเป็นผู้สร้างของ API นั้น)
ไม่ได้โดยตรง ซอฟต์แวร์เช่น Selenium มีคุณสมบัติเช่นนี้และสามารถควบคุมโดย PHP แต่มีการพึ่งพาอื่น ๆ (เช่นการใช้เซิร์ฟเวอร์ java-based บนคอมพิวเตอร์ด้วยเบราว์เซอร์ที่คุณต้องการจับภาพหน้าจอ)
คุณสามารถใช้ cutycapt
kwhtml เลิกใช้แล้วและแสดงหน้าเหมือนเบราว์เซอร์เก่า
ฉันได้พบนี้จะเป็นสิ่งที่ดีที่สุดและง่ายที่สุดในรอบเครื่องมือ: ScreenShotMachine มันเป็นบริการแบบชำระเงิน แต่คุณจะได้ภาพหน้าจอฟรี 100 ภาพและคุณสามารถซื้ออีก 2,000 รายการ (ประมาณ) $ 20 ดังนั้นมันจึงเป็นข้อเสนอที่ดีทีเดียว มันมีการใช้งานที่ง่ายมากคุณเพียงแค่ใช้ URL ดังนั้นฉันจึงเขียนสคริปต์นี้เพื่อบันทึกไฟล์ตาม:
<?php
$url = file_get_contents("http://api.screenshotmachine.com/?key={mykey}&url=https://stackoverflow.com&size=X");
$file = fopen("snapshots/stack.jpg", "w+");
fwrite($file, $url);
fclose($file);
die("saved file!");
?>
พวกเขามีเอกสารที่ดีมากที่นี่ดังนั้นคุณควรดูแน่นอน