سؤال

يرجى تقديم المشورة كيف تتخلص من اياكس صفحات.

هل كانت مفيدة؟

المحلول

نظرة عامة:

كل كشط الشاشة الأولى يتطلب المراجعة اليدوية من الصفحة التي تريد استخراج الموارد.عند التعامل مع اياكس عادة فقط تحتاج إلى تحليل أكثر قليلا من مجرد HTML.

عند التعامل مع اياكس هذا يعني فقط أن القيمة التي تريدها ليست في الأولى مستند HTML الذي طلبت, ولكن أن جافا سكريبت سوف يكون exectued الذي يطلب الملقم للحصول على معلومات إضافية تريد.

يمكنك ولذلك عادة ببساطة تحليل جافا سكريبت والتي ترى طلب جافا سكريبت يجعل فقط اتصل هذا العنوان بدلا من البداية.


على سبيل المثال:

خذ هذا المثال ، افترض الصفحة التي تريد أن تتخلص من لديه البرنامج النصي التالي:

<script type="text/javascript">
function ajaxFunction()
{
var xmlHttp;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    try
      {
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    catch (e)
      {
      alert("Your browser does not support AJAX!");
      return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
    {
    if(xmlHttp.readyState==4)
      {
      document.myForm.time.value=xmlHttp.responseText;
      }
    }
  xmlHttp.open("GET","time.asp",true);
  xmlHttp.send(null);
  }
</script>

ثم كل ما عليك القيام به هو القيام بدلا من ذلك طلب HTTP إلى الوقت.asp من نفس الخادم بدلا من ذلك. على سبيل المثال من w3schools.


المتقدمة إلغاء مع C++:

معقدة الاستخدام, و إذا كنت تستخدم C++ هل يمكن أن تنظر أيضا في استخدام فايرفوكس محرك جافا سكريبت وspidermonkey تنفيذ جافا سكريبت على الصفحة.

المتقدمة إلغاء مع جافا:

معقدة الاستخدام, و إذا كنت تستخدم جافا يمكنك أن تنظر أيضا في استخدام فايرفوكس محرك جافا سكريبت جافا وحيد القرن

المتقدمة إلغاء مع .صافي:

معقدة الاستخدام, و إذا كنت تستخدم .صافي هل يمكن أن تنظر أيضا في استخدام Microsoft.vsa الجمعية.استبدال مؤخرا مع ICodeCompiler/CodeDOM.

نصائح أخرى

في رأيي simpliest لالحل هو استخدام Casperjs ، إطارا يستند إلى phantomjs متصفح بكت مقطوعة الرأس.

وصفحة كاملة تحميل، وأنه من السهل جدا أن تتخلص من أي البيانات المتعلقة اياكس. يمكنك التحقق من هذا البرنامج التعليمي الأساسي لمعرفة أتمتة والقشط مع PhantomJS وCasperJS

ويمكنك أيضا إعطاء نظرة على هذا المثال رمز على كيفية تتخلص من جوجل يقترح الكلمات الرئيسية:

/*global casper:true*/
var casper = require('casper').create();
var suggestions = [];
var word = casper.cli.get(0);

if (!word) {
    casper.echo('please provide a word').exit(1);
}

casper.start('http://www.google.com/', function() {
    this.sendKeys('input[name=q]', word);
});

casper.waitFor(function() {
  return this.fetchText('.gsq_a table span').indexOf(word) === 0
}, function() {
  suggestions = this.evaluate(function() {
      var nodes = document.querySelectorAll('.gsq_a table span');
      return [].map.call(nodes, function(node){
          return node.textContent;
      });
  });
});

casper.run(function() {
  this.echo(suggestions.join('\n')).exit();
});

وإذا كان يمكنك الحصول على ذلك، في محاولة دراسة شجرة DOM. السيلينيوم يفعل ذلك كجزء من اختبار صفحة. كما أن لديها وظائف للنقر الأزرار وتتبع الروابط، والتي قد تكون مفيدة.

وأفضل طريقة لتتخلص من صفحات الويب باستخدام اياكس أو في صفحات العامة باستخدام جافا سكريبت هي مع المتصفح نفسه أو متصفح بلا (المتصفح دون GUI). حاليا phantomjs هو متصفح مقطوعة الرأس الترويج جيدا باستخدام بكت. بديلا التي استعملتها مع النجاح HtmlUnit (باللغة جافا أو. NET عبر <لأ href = "HTTP: / /www.ikvm.net/ "يختلط =" نوفولو "> IKVM ، الذي هو متصفح المحاكاة. وثمة بديل آخر معروف هو استخدام أداة أتمتة شبكة الإنترنت مثل <وأ href =" http://docs.seleniumhq.org / "يختلط =" نوفولو "> السيلينيوم .

وكتبت العديد من المقالات حول هذا الموضوع مثل الويب إلغاء اياكس وجافا سكريبت مواقع و الآلي المصادقة browserless أوث تويتر . في نهاية المادة الأولى هناك الكثير من الموارد الإضافية التي ولقد تم تجميع منذ عام 2011.

ويعتمد على الصفحة اياكس. الجزء الأول من كشط الشاشة هو تحديد الكيفية التي يعمل بها الصفحة. هناك نوع من متغير يمكنك تكرار خلال لطلب جميع البيانات من الصفحة؟ شخصيا لقد استعملت الويب مكشطة زائد للحصول على الكثير من الشاشة تجريف المهام ذات الصلة لأنها رخيصة، ليس من الصعب للبدء، يمكن لغير المبرمجين الحصول على عمل بسرعة نسبيا.

ملاحظة جانبية: شروط الاستخدام هو على الارجح في مكان ما قد ترغب في التحقق قبل القيام بذلك. اعتمادا على الموقع بالتكرار عبر كل ما قد يثير بعض الأعلام.

PhearJS ، ولكن هذا قد يكون جزئيا لأنني بنيت عليه.

وقال ذلك، انها خدمة تشغيل في الخلفية التي يتحدث HTTP (S)، ويجعل الصفحات كما JSON بالنسبة لك، بما في ذلك أي الفوقية قد تحتاج إليها.

وكحل منخفض التكلفة يمكنك أيضا محاولة SWExplorerAutomation (وSWEA). البرنامج يخلق API أتمتة لأي تطبيق ويب وضعها مع HTML، DHTML أو AJAX.

وأعتقد أن الجواب براين R. بوندي هي مفيدة عند شفرة المصدر من السهل قراءة. انا افضل وسيلة سهلة باستخدام أدوات مثل إيثار ريال أو HttpAnalyzer لالتقاط الحزمة والحصول على رابط من الحقل "المضيف" وحقل "GET".

وعلى سبيل المثال، وأنا التقاط حزمة كما يلي:

GET /hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330 
 HTTP/1.1
Accept: */*
Referer: http://quote.hexun.com/stock/default.aspx
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: quote.tool.hexun.com
Connection: Keep-Alive

وثم URL هو:

http://quote.tool.hexun.com/hqzx/quote.aspx?type=3&market=1&sorttype=3&updown=up&page=1&count=8&time=164330

والسيلينيوم WebDriver هو حل جيد: لك برنامج المتصفح وأتمتة ما يجب القيام به في المتصفح. متصفحات (كروم، فايرفوكس، الخ) توفر سائقيها الخاصة التي تعمل مع السيلينيوم. لأنه يعمل لمتصفح الآلي الحقيقي ، أو صفحات (بما في ذلك جافا سكريبت واياكس) الحصول على تحميل كما يفعلون مع الإنسان باستخدام هذا المتصفح.

والجانب السلبي هو أنه بطيء (منذ كنت على الأرجح ترغب في الانتظار لجميع الصور والنصوص لتحميل قبل أن تفعل كشط الخاصة بك على أن صفحة واحدة).

قلت سابقا مرتبطة MIT المذيبات EnvJS كما إجاباتي على كشط اياكس صفحات.هذه المشاريع يبدو لم يعد موجودا.

من مجرد ضرورة ، لقد اخترع طريقة أخرى في الواقع كشط اياكس صفحات ، وقد عملت صعبة مواقع مثل findthecompany التي لديها أساليب تجد مقطوعة الرأس جافا سكريبت محركات و لا تظهر أي بيانات.

تقنية استخدام ملحقات كروم للقيام كشط.ملحقات كروم هي أفضل مكان إلى كشط اياكس صفحات لأنهم في الواقع يسمح لنا الوصول إلى جافا سكريبت تعديل دوم.هذه التقنية على النحو التالي, أنا بالتأكيد سوف مفتوح المصدر مدونة في وقت ما.إنشاء chrome ( على افتراض أن كنت تعرف كيفية إنشاء واحد و العمارة و قدرات.هذه هي سهلة التعلم و الممارسة كما أن هناك الكثير من عينات) ،

  1. استخدام البرامج النصية المحتوى للوصول إلى DOM باستخدام xpath.إلى حد كبير الحصول على قائمة كاملة أو الجدول أو حيوي المقدمة المحتوى باستخدام xpath إلى متغير سلسلة HTML العقد.( فقط محتوى البرامج النصية يمكن الوصول دوم لكن لا يمكنهم الاتصال URL باستخدام XMLHTTP )
  2. من المحتوى النصي باستخدام تمرير الرسائل, رسالة كاملة جردت دوم as string, على خلفية البرنامج النصي.( الخلفية النصية يمكن التحدث عناوين المواقع ولكن لا يمكن أن تلمس DOM ).نحن نستخدم تمرير الرسائل للحصول على هذه الحديث.
  3. يمكنك استخدام مختلف الأحداث حلقة من خلال صفحات الويب و تمرير كل جردت HTML عقدة المحتوى الخلفية النصي.
  4. الآن استخدام الخلفية النصي التحدث خادم خارجي (على localhost) واحد بسيط إنشاؤها باستخدام Nodejs/بيثون.فقط أرسل كامل HTML العقد سلسلة, إلى ملقم server فقط لا تزال قائمة المحتويات المنشورة ، في الملفات مع المتغيرات المناسبة لتحديد أرقام الصفحات أو عناوين المواقع.
  5. الآن لديك كشط اياكس المحتوى ( HTML العقد as string ), ولكن هذه هي الجزئية html العقد.الآن يمكنك استخدام المفضلة لديك XPATH مكتبة لتحميل هذه إلى الذاكرة باستخدام XPATH أن تتخلص من المعلومات في الجداول أو النص.

يرجى التعليق إذا كنت غير قادر على فهم و أستطيع أن أكتب أفضل.( المحاولة الأولى ).أيضا, أنا أحاول أن الإفراج عن نموذج التعليمة البرمجية في أقرب وقت ممكن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top