Получить содержимое с помощью двух меток с помощью Casperjs

1

Я только начинаю с CasperJs, и я бы хотел получить текущий номер страницы, который хранится в списке. Я предполагаю, что это можно сделать, объединив class и aria-selected которая должна быть правдой для указания текущей страницы.

Я был бы признателен, если бы кто-нибудь мог указать, как это сделать программно. Вот что у меня есть до сих пор:

var casper = require("casper").create({
    pageSettings: {
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20130404 Firefox/23.0"
    }
});

var url = 'https://markets.ft.com/data/director-dealings';
var currentPage = 1;
var jobs = [];

casper.start(url, function() {
    this.waitForSelector('li[class="mod-ui-pagination__number"]');
});

casper.then(function() {

    var el = document.querySelectorAll('body > div.o-grid-container.mod-container > div:nth-child(2) > section > div:nth-child(1) > div > div > div.mod-ui-pagination__results-count > ul');//div[3] div[2] section div[1] div div div[3] ul li[2]');

    this.echo(JSON.stringify(el)); 
});

casper.run();

HTML:

<ul class="mod-ui-pagination">
    <li class="mod-ui-pagination__arrows" aria-disabled="false"><i class="o-ft-icons-icon o-ft-icons-icon--arrow-left"></i></li>
    <li class="mod-ui-pagination__number" aria-selected="false" data-mod-pagination-num="1">1</li>
    <li class="mod-ui-pagination__number" aria-selected="true" data-mod-pagination-num="2">2</li>
    <li class="mod-ui-pagination__number" aria-selected="false" data-mod-pagination-num="3">3</li>
    <li class="mod-ui-pagination__ellipsis"><i class="o-ft-icons-icon o-ft-icons-icon--more"></i></li>
    <li class="mod-ui-pagination__number" aria-selected="false" data-mod-pagination-num="739">739</li>
    <li class="mod-ui-pagination__number" aria-selected="false" data-mod-pagination-num="740">740</li>
    <li class="mod-ui-pagination__number" aria-selected="false" data-mod-pagination-num="741">741</li>
    <li class="mod-ui-pagination__arrows" aria-disabled="false"><i class="o-ft-icons-icon o-ft-icons-icon--arrow-right"></i></li>
</ul>

PS: Есть ли уловка, чтобы быстро найти, как получить доступ к элементу? Осмотреть> Селектор копирования

Edit: Inspect> Copy Xpath возвращает это для элемента ul: html/body/div[3]/div[2]/section/div[1]/div/div/div[3]/ul/li[2]

Теги:
web-scraping
casperjs

1 ответ

0
Лучший ответ
  1. Используйте evaluate() для доступа к среде реальной страницы (DOM)
  2. Используйте querySelector() вместо querySelectorAll() потому что вам нужен только один элемент
  3. Используйте этот селектор CSS: ul.mod-ui-pagination > li[aria-selected="true"]

Вот сценарий:

var casper = require('casper').create({
  pageSettings: {
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:23.0) Gecko/20130404 Firefox/23.0'
  }
});

casper.start('https://markets.ft.com/data/director-dealings');

casper.waitForSelector('li.mod-ui-pagination__number', function () {
  this.echo(this.evaluate(function () {
    var el = document.querySelector('ul.mod-ui-pagination > li[aria-selected="true"]');
    return el.textContent;
  }));
});

casper.run();
  • 0
    Я ценю это, не могли бы вы уточнить следующие моменты: 1. Зачем оценивать, а не просто обращаться напрямую к DOM? 2. Как вы получили CSS селектор?
  • 0
    1. Когда вы запускаете сценарий CasperJS в PhantomJS или SlimerJS, вы находитесь в определенной среде и не имеете доступа к DOM. Вне evaluate this относится к casper . Внутри evaluate , this относится к window . Вы можете получить больше информации здесь . 2. Я построил этот селектор вручную, в соответствии с вашими потребностями. ul.mod-ui-pagination важна, чтобы предназначаться для нумерации страниц (который является списком). > Говорит, что мы хотим только прямых детей ( li ). Наконец, li[aria-selected="true"] дает вам выбранный li ; именно то, что вы хотите ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню