Xetera / ghost-cursor

🖱️ Generate human-like mouse movements with puppeteer or on any 2D plane
MIT License
1.11k stars 120 forks source link

Allow passing element's point that should be clicked instead of calculating a random point #151

Open vworld opened 3 days ago

vworld commented 3 days ago

The library is good and I love what you have done. An additional option could be to allow an X and Y point relative to the element that should be clicked instead of calculating the point randomly.

This would help when

For example, this would allow checking if the point that will be clicked is indeed the element that must be clicked, is active and not occluded by some other elements; thereby making the action predictable. This would also solve/provide a robust alternative for Issue #120 #109 where users can implement their own method to select the point.

So the MoveOptions interface can include

  {
    /** X and Y points relative to the top-left corner of the element */
    clickDestination: {X: number, Y: number}
  }

and the destination calculation would be

// const destination = getRandomBoxPoint(box, optionsResolved)
const destination = {x: box.x + options.clickDestination.x, y: box.y + options.clickDestination.y}

If you approve, I can submit a pull request.