Я працюю над зішкрібненням екрану і хочу отримати вихідний код певної сторінки.
Як досягти цього за допомогою JavaScript? Будь ласка, допоможи мені.
Я працюю над зішкрібненням екрану і хочу отримати вихідний код певної сторінки.
Як досягти цього за допомогою JavaScript? Будь ласка, допоможи мені.
$.ajaxдля зовнішніх посилань. ось рішення - stackoverflow.com/a/18447625/2657601
Відповіді:
Простий спосіб почати, спробуйте jQuery
$("#links").load("/Main_Page #jq-p-Getting-Started li");
Більше на jQuery Docs
Інший спосіб зробити зішкріб з екрана набагато більш структурованим способом - це використовувати YQL або Yahoo Query Language. Він поверне скопійовані дані, структуровані як JSON або xml.
напр.
Давайте зішкребмо stackoverflow.com
select * from html where url="http://stackoverflow.com"
дасть вам масив JSON (я вибрав цей варіант) таким чином
"results": {
"body": {
"noscript": [
{
"div": {
"id": "noscript-padding"
}
},
{
"div": {
"id": "noscript-warning",
"p": "Stack Overflow 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властивості. Якщо це не той самий домен, ваші користувачі отримають сповіщення веб-переглядача із повідомленням на зразок "Ця сторінка намагається отримати доступ до іншого домену. Ви хочете дозволити це?"
Використання 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();
Sidenote: Я знайшов це питання під час дослідження того, що, на мою думку, було таким самим, тому інші могли б знайти моє рішення корисним.
ОНОВЛЕННЯ: Я створив нову, якою вони мені дозволили користуватися менше ніж за 48 годин, перш ніж вони сказали, що я повинен заплатити за послугу. Здається, вони досить швидко закрили ваш проект, якщо ви не платите. Я створив власну подібну службу з NodeJS та бібліотекою NightmareJS. Ви можете ознайомитись з їхнім посібником тут і створити власний інструмент вискоблювання веб-сторінок. Це порівняно просто. Я не намагався встановити його як API, до якого я можу надсилати запити, або щось інше.
Ви можете використовувати вибірку :
const URL = 'https://www.sap.com/belgique/index.html';
fetch(URL)
.then(res => res.text())
.then(text => {
console.log(text);
})
.catch(err => console.log(err));
Ви можете сформувати XmlHttpRequest і запитати сторінку, а потім використовувати getResponseText () для отримання вмісту.
Ви можете скористатися API FileReader, щоб отримати файл, і, вибираючи файл, помістіть 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 у нове вікно. Мій сценарій додає теги html, але у більшості сучасних браузерів цього можна уникнути, використовуючи externalHTML.
<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>
TypeError: undefined is not an object (evaluating 'w.document')
<script>
$.getJSON('http://www.whateverorigin.org/get?url=' + encodeURIComponent('hhttps://example.com/') + '&callback=?', function (data) {
alert(data.contents);
});
</script>
Включіть jQuery і використовуйте цей код, щоб отримати HTML іншого веб-сайту. Замініть example.com на ваш веб-сайт .
Цей метод передбачає отримання зовнішнім сервером HTML-кодів веб-сайтів та надсилання їх вам. :)
javascript:alert("Inspect Element On");
javascript:document.body.contentEditable = 'true';
document.designMode='on';
void 0;
javascript:alert(document.documentElement.innerHTML);
Виділіть це та перетягніть його на панель закладок і клацніть на ньому, коли ви хочете редагувати та переглядати поточний вихідний код веб-сайтів.
На Linux
завантажити slimerjs (slimerjs.org)
завантажити Firefox версії 59
додати цю змінну середовища: export SLIMERJSLAUNCHER = / home / en / Letöltések / firefox59 / firefox / firefox
на сторінці завантаження slimerjs використовуйте цю програму .js (./slomerjs program.js):
var page = require('webpage').create();
page.open(
'http://www.google.com/search?q=görény',
function()
{
page.render('goo2.pdf');
phantom.exit();
}
);
Використовуйте pdftotext, щоб отримати текст на сторінці.