Coder Social home page Coder Social logo

Click on Element question about mts HOT 2 CLOSED

merlinthemagic avatar merlinthemagic commented on August 17, 2024
Click on Element question

from mts.

Comments (2)

jenniferamie avatar jenniferamie commented on August 17, 2024 1

thank you so much !

from mts.

merlinthemagic avatar merlinthemagic commented on August 17, 2024

Your question is if you can use a single selector to click multiple elements? The answer is no. The clickElement() method will click the first element selected and then return.

I am not 100% understanding the objective, are you trying to get images from a website and the images require a button to be clicked before they render on the page? If the images render in the same location ("prettyPhoto[iframe]") you will need to click link, download image, click next link etc.

As i said i dont fully understand what you are trying to do. Nevertheless here are two ways to click more than one link.

In both solutions you start with a $windowObj and a selector:

$url                = "http://www.example.com";
$windowObj      = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($url);

//this selector gets all links that have class "bblcheck_button" specified.
$selector           = "a.bblcheck_button";

That was the general part. Next up the solution in PHP per link:

//load a custom function onto the page:
$scriptData = "function getLinks() {            
    var rData       = [];
    var eles        = document.querySelectorAll('" . $selector . "');
    if (eles.length > 0) {
        for (var x=0; x < eles.length; x++) {
            var eAttr   = eles[x].getAttribute('record_id');
            if (eAttr != '') {
                rData.push(eAttr);
            }
        }
    }               
    return JSON.stringify(rData);
}";
$windowObj->loadJS($scriptData);

//Call the function and get the record ids back, then click on each link:
$linkArr    = $windowObj->callJSFunction("getLinks");
if ($linkArr != "") {
    $recordIds      = json_decode($linkArr, true);
    foreach ($recordIds as $recordId) {
        $linkSelector   = "[record_id='".$recordId."']";
        $windowObj->clickElement($linkSelector);
    }
}

Second Solution all JavaScript:

//load a custom function onto the page:
$scriptData = "function clickLinks() {
    var eles        = document.querySelectorAll('" . $selector . "');
    if (eles.length > 0) {
        for (var x=0; x < eles.length; x++) {
            eles[x].click();
        }
    }
    return 'clicked: ' + eles.length + ' links';
}";
$windowObj->loadJS($scriptData);

//Call the function which will click each link:
$clickCount = $windowObj->callJSFunction("clickLinks");

You should read up on how to craft CSS selectors.

from mts.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.