Я думаю, что PHP бесполезен, bacause iframe вставлен после выполнения php, или я ошибаюсь?
Итак, единственным решением, о котором я знаю, является использование Javascript / jQuery.
Например, это будет работать, если JS будет на той же странице, что и iframe:
<html> <head> <title></title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> <script type="text/javascript"> $(function() { var myContent = $("#iFrame").contents().find("#myContent") }); </script> </head> <body> <iframe src="mifile.html" id="iFrame" style="width:200px;height:70px;border:dotted 1px red" frameborder="0"> <div id="myContent"> iframe content blablabla </div> </iframe> </body> </html>
Однако я использую Simple HTML DOM-библиотеку, чтобы захватить удаленную веб-страницу, например:
$url = 'http://page-with-some-iframe.com/'; $html = file_get_html( $url ); // Find iframes and put them in an array $iframes_arr = array(); foreach($html->find('iframe') as $element) { $iframes_arr[] = $element->outertext; } var_dump($iframes_arr); die();
Но, очевидно, ничего не возвращается; (потому что iframe отображаются после запуска php; (
Итак, я думал, что мне, вероятно, нужно будет ввести этот код:
<script type="text/javascript"> $(function() { var myContent = $("#iFrame").contents().find("#myContent") }); </script>
в заголовке моей захваченной страницы, хранящейся в $ html.
Любая идея, как получить контент iframe, подобный этому, или это слишком сложный подход, и существует более простое решение?
Вы не сможете получить доступ к документу удаленной страницы внутри iframe, используя javascript из-за той же политики происхождения.
Если вы знаете URL-адрес страницы, вы можете использовать PHP CURL для ее получения
<?php // Initialise a cURL object $ch = curl_init(); // Set url and other options curl_setopt($ch, CURLOPT_URL, "http://page-with-some-iframe.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Get the page contents $output = curl_exec($ch); // close curl resource to free up system resources curl_close($ch);
Это невозможно из-за политики безопасности. Если вы можете получить содержимое удаленного iframe – вы можете легко украсть чей-то фейсбук или банковские данные. Вот почему все веб-браузеры блокируют это.