Я работаю над очисткой экрана и хочу получить исходный код на определенной странице.
Как это можно сделать с помощью javascript? Пожалуйста, помогите мне.
Я работаю над очисткой экрана и хочу получить исходный код на определенной странице.
Как это можно сделать с помощью javascript? Пожалуйста, помогите мне.
Простой способ начать, попробуйте jQuery
$("#links").load("/Main_Page #jq-p-Getting-Started li");
Подробнее в jQuery Docs
Другой способ сделать скриншоты экрана гораздо более структурированным способом - использовать YQL или язык запросов Yahoo. Он вернет очищенные данные, структурированные как JSON или xml.
например
Пусть scrape stackoverflow.com
select * from html where url="http://stackoverflow.com"
предоставит вам массив JSON (я выбрал эту опцию), как этот
"results": {
"body": {
"noscript": [
{
"div": {
"id": "noscript-padding"
}
},
{
"div": {
"id": "noscript-warning",
"p": "Qaru works best with JavaScript enabled"
}
}
],
"div": [
{
"id": "notify-container"
},
{
"div": [
{
"id": "header",
"div": [
{
"id": "hlogo",
"a": {
"href": "/",
"img": {
"alt": "logo homepage",
"height": "70",
"src": "http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png",
"width": "250"
}
……..
Красота заключается в том, что вы можете делать прогнозы и где, что в конечном итоге дает вам очищенные данные, структурированные и только данные, в которых вы нуждаетесь (гораздо меньше пропускной способности по всему кабелю)
например,
select * from html where url="http://stackoverflow.com" and
xpath='//div/h3/a'
получит вас
"results": {
"a": [
{
"href": "/questions/414690/iphone-simulator-port-for-windows-closed",
"title": "Duplicate: Is any Windows simulator available to test iPhone application? as a hobbyist who cannot afford a mac, i set up a toolchain kit locally on cygwin to compile objecti … ",
"content": "iphone\n simulator port for windows [closed]"
},
{
"href": "/questions/680867/how-to-redirect-the-web-page-in-flex-application",
"title": "I have a button control ....i need another web page to be redirected while clicking that button .... how to do that ? Thanks ",
"content": "How\n to redirect the web page in flex application ?"
},
…..
Теперь, чтобы получить только те вопросы, которые мы делаем,
select title from html where url="http://stackoverflow.com" and
xpath='//div/h3/a'
Обратите внимание на заголовок в проекциях
"results": {
"a": [
{
"title": "I don't want the function to be entered simultaneously by multiple threads, neither do I want it to be entered again when it has not returned yet. Is there any approach to achieve … "
},
{
"title": "I'm certain I'm doing something really obviously stupid, but I've been trying to figure it out for a few hours now and nothing is jumping out at me. I'm using a ModelForm so I can … "
},
{
"title": "when i am going through my project in IE only its showing errors A runtime error has occurred Do you wish to debug? Line 768 Error:Expected')' Is this is regarding any script er … "
},
{
"title": "I have a java batch file consisting of 4 execution steps written for analyzing any Java application. In one of the steps, I'm adding few libs in classpath that are needed for my co … "
},
{
……
Как только вы напишете свой запрос, он генерирует URL-адрес для вас
в нашем случае.
Итак, в конечном итоге вы в конечном итоге делаете что-то вроде этого
var titleList = $.getJSON(theAboveUrl);
и играйте с ним.
Красивая, не так ли?
Javascript может использоваться, пока вы захватываете любую страницу, которую вы используете через прокси-сервер в вашем домене:
<html>
<head>
<script src="/js/jquery-1.3.2.js"></script>
</head>
<body>
<script>
$.get("www.mydomain.com/?url=www.google.com", function(response) {
alert(response)
});
</script>
</body>
Вы можете просто использовать XmlHttp
(AJAX), чтобы набрать нужный URL-адрес, и ответ HTML из URL-адреса будет доступен в свойстве responseText
. Если это не тот же домен, ваши пользователи получат предупреждение обозревателя, говорящее что-то вроде "Эта страница пытается получить доступ к другому домену. Вы хотите разрешить это?"
В качестве меры безопасности Javascript не может читать файлы из разных доменов. Хотя для этого может быть какое-то странное решение, я бы рассмотрел другой язык для этой задачи.
Использование jquery
<html>
<head>
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js" ></script>
</head>
<body>
<script>
$.get("www.google.com", function(response) { alert(response) });
</script>
</body>
Я использовал ImportIO. Они позволяют вам запрашивать HTML-код с любого веб-сайта, если вы создали учетную запись с ними (что бесплатно). Они позволяют вам составлять до 50 тыс. Запросов в год. Я не нашел времени найти альтернативу, но я уверен, что есть некоторые.
В вашем Javascript вы просто просто сделаете запрос GET следующим образом:
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
jsontext = request.responseText;
alert(jsontext);
}
request.open("GET", "https://extraction.import.io/query/extractor/THE_PUBLIC_LINK_THEY_GIVE_YOU?_apikey=YOUR_KEY&url=YOUR_URL", true);
request.send();
Если вам абсолютно необходимо использовать javascript, вы можете загрузить источник страницы с помощью запроса ajax.
Обратите внимание, что с помощью javascript вы можете получать только страницы, расположенные в том же домене, с запрашивающей страницей.
Вы можете создать XmlHttpRequest и запросить страницу, а затем использовать getResponseText() для получения содержимого.
Вы можете использовать FileReader API, чтобы получить файл, и при выборе файла поместите URL-адрес вашей веб-страницы в поле выбора, Используйте этот код:
function readFile() {
var f = document.getElementById("yourfileinput").files[0];
if (f) {
var r = new FileReader();
r.onload = function(e) {
alert(r.result);
}
r.readAsText(f);
} else {
alert("file could not be found")
}
}
}
Вы можете обойти политику одинакового происхождения путем создания расширения браузера или даже сохранения файла как .hta в Windows (приложение HTML).
Несмотря на множество замечаний об обратном, я считаю, что с одним JavaScript можно преодолеть одно и то же требование происхождения.
Я не утверждаю, что следующее оригинально, потому что я считаю, что некоторое время назад я видел нечто подобное в другом месте.
Я тестировал это только с Safari на Mac.
Следующая демонстрация выводит страницу в базовый тег и перемещает ее innerHTML в новое окно. Мой script добавляет теги html, но с большинством современных браузеров этого можно избежать, используя outerHTML.
<html>
<head>
<base href='http://apod.nasa.gov/apod/'>
<title>test</title>
<style>
body { margin: 0 }
textarea { outline: none; padding: 2em; width: 100%; height: 100% }
</style>
</head>
<body onload="w=window.open('#'); x=document.getElementById('t'); a='<html>\n'; b='\n</html>'; setTimeout('x.innerHTML=a+w.document.documentElement.innerHTML+b; w.close()',2000)">
<textarea id=t></textarea>
</body>
</html>