Внедрение кода javascript в событие клика с помощью javascript и casper.js

Я только начал использовать casperjs после попытки использовать python (selenium/requests и mechanise) для очистки страницы только после того, как какой-то javascript загрузил некоторый динамический контент на страницу.

Поскольку это было очень сложно сделать или очень медленно с селеном, было предложено обратиться к Casper js (для которого требуются phantomjs).

Одна вещь, которую мне интересно (я совершенно новичок в javascript), связана с событием javascript onclick.

Страница, которую я хочу очистить, по умолчанию показывает десять имен на странице, а внизу есть варианты: показать (5) или показать (100).

После погружения в этот код и проверки его с помощью firebug мне интересно, можно ли изменить onclick=loaditems(100) на что-то вроде... onclick=loaditems(Load X items), где X может быть 200. (или что-то еще количество, которое должно быть, чтобы загрузить весь контент на одну страницу и облегчить его очистку. Возможно ли это?

обновить * рецензент запросил код, используемый для выбора 100 элементов на странице....

Код (HTML)...

<a title="Show 100 items per page"
onclick="lconn.profiles.Friending.setItemsPerPage(this,100)" href="javascript:void(0);">100</a> 

а Xpath...

/html/body/div/div[2]/div[3]/div[3]/span/div/div/div/div/div[2]/div/div/form/div??/div[4]/div/ul/li[4]/a

проблема Я могу отредактировать команду onclick и изменить значение на большее число, однако я не знаю, как затем выполнить ее с большим количеством элементов, которые я хочу отобразить на странице, чтобы увидеть, оно работает.


person yoshiserry    schedule 20.05.2014    source источник
comment
Если можно на странице, можно с каспера. Покажите нам HTML, если вам нужна дополнительная информация.   -  person Fanch    schedule 20.05.2014
comment
Код (HTML) таков. ... /html/body/div/div[2]/div[3]/div[3]/span/div/div/div/div/div[2]/div/div/form/div/div[ 4]/дел/ул/ли[4]/а   -  person yoshiserry    schedule 21.05.2014
comment
Да, спасибо, это помогло много. Знаете ли вы, как вызвать сценарий Casper JS из Python, где сценарий Casper JS может принимать параметр в качестве входных данных и возвращать полученные данные в Python?   -  person yoshiserry    schedule 20.06.2014


Ответы (1)


Для этой задачи я использовал простой селектор CSS. Вы можете изменить атрибут onclick с помощью строковых операций. В этом случае я заменяю "100" на num. Я также добавил аргумент clickIt, чтобы щелкнуть измененную ссылку.

casper.changeItemsPerPageLink = function(num, clickIt){
    casper.evaluate(function(num, clickIt){
        num = ""+num;
        var a = document.querySelector('a[title="Show 100 items per page"]');
        a.innerHTML = num;
        a.title = a.title.replace("100", num);
        a.setAttribute("onclick", a.getAttribute("onclick").replace("100", num));
        if (clickIt) {
            a.click();
        }
    }, num, clickIt);
};

См. мой тестовый код gist.

person Artjom B.    schedule 15.06.2014