2013-10-02 1 views
0

У меня есть LibCURL, получающий источник страницы из Интернета, проходящий через него и сбор данных.Как получить «полный источник» страницы?

Все работает отличный бар на одной странице. У меня была эта проблема во время тестирования в автономном режиме при использовании ifstream и источника страницы, сохраненных в файле .html. в основном, что происходит. Я думаю, что веб-страница отображает html + данные, части, которые я хочу через js-вызовы (не на 100% уверены в этом), поэтому он не отображается непосредственно в источнике.

Как я обошел это в автономном тестировании, было загрузить полную веб-страницу в виде файла автономного режима в Safari, я считаю, что он был назван файлом .webarchive? Таким образом, когда я рассматривал его как исходный код, html и данные были отображены в источнике.

Я пробовал интернет для ответа, но, похоже, не могу найти его, может ли кто-нибудь помочь мне здесь, в условиях завивки, чтобы загрузить веб-страницу в ее «полноте»?

Вот какие варианты я использую в настоящее время.

curl_easy_setopt(this->curl, CURLOPT_URL, url); 
curl_easy_setopt(this->curl, CURLOPT_FOLLOWLOCATION, 1); 
curl_easy_setopt(this->curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"); 
curl_easy_setopt(this->curl, CURLOPT_COOKIEFILE, "cookies.txt"); 
curl_easy_setopt(this->curl, CURLOPT_COOKIEJAR, "cookies.txt"); 
curl_easy_setopt(this->curl, CURLOPT_POSTFIELDS, postData); // if needed 
curl_easy_setopt(this->curl, CURLOPT_WRITEFUNCTION, this->WriteCallback); 
curl_easy_setopt(this->curl, CURLOPT_WRITEDATA, &readBuffer); 
res = curl_easy_perform(this->curl); 
+0

при использовании элемента проверки firefox я могу получить источник в порядке. iv отследил его, и, похоже, JS, есть два тега div, показанный 1, когда его загрузка и вторая показаны при его загрузке. также js автоматически вызывается переменной GET, посланной по URL-адресу, например page.php? a = 1 & b = 2, это займет всего несколько секунд после загрузки, чтобы показать?

Makka

ответ

1

Вам нужно будет разобрать html и загрузить каждую ссылку гипертекста в документе.

Когда Safari загружает веб-страницы, он сбрасывает все, что касается этой страницы, активно кэшированных в к .webarchive, который содержит локальные ссылки для всех изображений, CSS и JS-файлов. Это означает, что он просто дает вам страницу в загруженной форме со всеми изображениями в архиве и отличается от реального источника.

Вы можете выполнить поиск строки для href= и src= (после удаления каждого места в документе) и получить URL-адреса для большинства из них таким образом.

Некоторые href и src теги будут иметь относительные ссылки, а не абсолютные. Поэтому не забудьте проверить начало для http://, иначе вам придется использовать путь в своей переменной url и объединить строки.

Единственная проблема с этим - это контент, который динамически загружается через JavaScript или CSS (что вы упомянули в передаче), что затруднит работу, так как вам придется также просканировать эти файлы для ссылок на этот контент.

Удачи вам!

+1

не только разбора JS, но вы можете также есть на самом деле выполнить его, чтобы увидеть, как она манипулирует содержимое веб-страницы, особенно если он с помощью DOM интерфейсов, чтобы сделать это. Так что, получить «полный» источник, используя только libcurl, недостаточно, поскольку все, что он получит, - это статический контент HTML, а не его динамический контент. –

+0

при использовании элемента проверки firefox я могу получить источник в порядке. iv отследил его, и, похоже, JS, есть два тега div, показанный 1, когда его загрузка и вторая показаны при его загрузке. также js автоматически вызывается переменной GET, посланной по URL-адресу, например page.php? a = 1 & b = 2, это займет всего несколько секунд после загрузки, чтобы показать?

Makka

+0

Ах, не думал об AJAX. Когда вы используете 'libcurl', вы используете HTTP GET. Отслеживание URL-адреса содержимого, которое запрашивается, может быть выполнено путем разбора JS. Даже тогда вам придется выяснить, был ли AJAX выполнен с помощью jQuery или стандартного JavaScript или даже другого инструментария. А затем вставьте этот отдельный запрос в первоначально возвращенный HTML. –