автоматически щелкнуть элемент на веб-странице с помощью тампера? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь получить последнюю страницу результатов от Factiva .Я надеюсь автоматически нажать кнопку Next 100.

Изображение, чтобы предоставить дополнительную информацию: изображение

Я уже пробовал скрипт AutoClicker.Он работает для кнопки modify search, но не может нажать Next 100.

Ошибка отображается как:

Автокликер не находит объект щелчка!

Мне было интересно, использовал ли Xpath , который я использовалнеправильно.

элемент :

    <a class="nextItem" href="javascript:void(0)"
      onclick="viewNext('241');return false">Next 100 </a>

селектор :

    #headlineHeader33 > table > tbody > tr > td > a.nextItem

Xpath:

    //*[@id="headlineHeader33"]/table/tbody/tr/td/a[2]

Вот код, который я использовал:

(function() {
    'use strict';

var cyce = 1000;

var str_xpath = '//*[@id="headlineHeader33"]/table/tbody/tr/td/a[2]';
// another way,e.g: var str_qs = "div .search span a";
var str_qs = "";



function getTargetById(t_id){
    var target = document.getElementById(t_id);
    return target;
}


function getTargetByTAV(t_tag,t_attr,t_value){
    var target = document.getElementsByTagName(t_tag);
    for(var i=0;i <target.length;i++){
        if(target[i].getAttribute(t_attr) == t_value){
            return target[i];
        }
    }
}

function getTargetByXpath(str_xpath) {
    var xresult = document.evaluate(str_xpath, document, null, XPathResult.ANY_TYPE, null);
    var xnodes = [];
    var xres;
    while (xres = xresult.iterateNext()) {
        xnodes.push(xres);
    }
    return xnodes;
}


function getTargetByQS(str_qs){
    var target = document.querySelector(str_qs);
    return target;
}


function trim(str){
    str = str.replace(/(^\s*)|(\s*$)/g, "");
    return str;
}


var btn;

if(isCustiom === true){
    btn = getTargetByCustom();
}

if(trim(id) !== "" && (btn === null | typeof(btn) !== 'object')){
    btn = getTargetById(id);
}

if(trim(tag) !== "" && trim(attr) !== "" && value !== "" && (btn === null | typeof(btn) !== 'object')){
    btn = getTargetByTAV(tag,attr,value);
}

if(trim(str_xpath) !== "" && (btn === null | typeof(btn) !== 'object')){
    btn = getTargetByXpath(str_xpath)[0];
}

if(trim(str_qs) !== "" && (btn === null | typeof(btn) !== 'object')){
    btn = getTargetByQS(str_qs);
}

setInterval(function() {
        if (btn !== null && typeof(btn) === 'object') {
            console.info("[+] AutoClicker click object: " + btn.innerHTML);
            btn.click();
        }else{
            console.warn('[-] Autoclicker does not find the click object!');
        }
    },cyce);
})();

1 Ответ

0 голосов
/ 11 февраля 2019

Я не могу помочь вам с xPath, потому что я не знаю, как формируется документ.Тем не менее, ваш сценарий также предоставляет возможность выбрать элемент с querySelector.Который выбирает элементы, используя css-селекторы . Я настоятельно рекомендую использовать это более современное решение .

function getTargetByQS(str_qs){
    var target = document.querySelector(str_qs);
    return target;
}

Единственное, что вам нужно сделать, это предоставить str_qs и правильный селектор:

селектор

a.nextItem[onclick*='viewNext']

Селектор ищет якорный элемент a с именем класса nextItem и свойство onclick, содержащее viewNext.

Строка

str_qs = "a.nextItem[onclick*='viewNext']";

Смотрите решение в действии:

var timer;
(function() {
    'use strict';

//stripped all other functions just to demonstrate the function getTargetByQS

var cyce = 1000;

var str_qs = "a.nextItem[onclick*='viewNext']";

function getTargetByQS(str_qs){
    var target = document.querySelector(str_qs);
    return target;
}


function trim(str){
    str = str.replace(/(^\s*)|(\s*$)/g, "");
    return str;
}


var btn;
if(trim(str_qs) !== "" && (btn === null | typeof(btn) !== 'object')){
    btn = getTargetByQS(str_qs);
}

timer = setInterval(function() {
        if (btn !== null && typeof(btn) === 'object') {
            console.info("[+] AutoClicker click object: " + btn.innerHTML);
            btn.click();
        }else{
            console.warn('[-] Autoclicker does not find the click object!');
        }
    },cyce);
})();

//not part of the solution, just for the demo.
function viewNext(){
  window.clearInterval(timer); //shut down the interval for demo-purposes
}
  <a class="nextItem" href="javascript:void(0)"
      onclick="viewNext('241');return false">Next 100 </a>
...