How to click on selectbox options using PhantomJS

后端 未结 1 1669
别跟我提以往
别跟我提以往 2021-01-05 20:53

There is the page testkrok.org.ua with a consistent selection of parameters. So, I need to create a series of 5 clicks on each of the options of 5 select boxes that depend o

相关标签:
1条回答
  • 2021-01-05 21:28

    You can't click (trigger a click event) on options of a select box. You need to change the selected option and then trigger a change event. For example:

    var sel = document.querySelector('select.se1');
    sel.selectedIndex = 2;
    var event = new UIEvent("change", {
        "view": window,
        "bubbles": true,
        "cancelable": true
    });
    sel.dispatchEvent(event);
    

    You can package that in a function

    function selectOption(selector, optionIndex) {
        page.evaluate(function(selector, optionIndex){
            var sel = document.querySelector(selector);
            sel.selectedIndex = optionIndex;
            var event = new UIEvent("change", {
                "view": window,
                "bubbles": true,
                "cancelable": true
            });
            sel.dispatchEvent(event);
        }, selector, optionIndex);
    }
    

    Then you can call it one after the other

    selectOption("select.se1", 2);
    selectOption("select.se2", 0);
    selectOption("select.se3", 0);
    ...
    

    You get the idea. In case the onChange event of the select box needs remote data for example through AJAX, then you will need to wait between the calls. Either use a static wait time (see following example) or use waitFor().

    setTimeout(function(){
        selectOption("select.se1", 2);
    }, 1000);
    setTimeout(function(){
        selectOption("select.se2", 0);
    }, 2000);
    setTimeout(function(){
        selectOption("select.se3", 0);
    }, 3000);
    ...
    
    0 讨论(0)
提交回复
热议问题