Selenium AutoIt Automation-如何模拟仿人光标移动

Selenium AutoIt Automation-如何模拟仿人光标移动,selenium,autoit,Selenium,Autoit,我写了一个关于如何使用SeleniumWeb驱动程序和Java模拟类人光标移动的问题 在这个任务中,我发现Selenium Web驱动程序可能不是最合适的。它不能直接移动光标。或者能够以我需要的方式 我不需要移动鼠标。只要网站认为光标在正常移动 我学习了AutoIt自动化,并编写了一些脚本。我构建了一个脚本,用于在上传照片时自动执行所需的关键笔划。我想到了将需要上传的文件路径写入.txt文件的想法。这是在我的Java应用程序中完成的。然后当我从Java调用AutoIt.exe文件时。然后读取.t

我写了一个关于如何使用SeleniumWeb驱动程序和Java模拟类人光标移动的问题

在这个任务中,我发现Selenium Web驱动程序可能不是最合适的。它不能直接移动光标。或者能够以我需要的方式

我不需要移动鼠标。只要网站认为光标在正常移动

我学习了AutoIt自动化,并编写了一些脚本。我构建了一个脚本,用于在上传照片时自动执行所需的关键笔划。我想到了将需要上传的文件路径写入.txt文件的想法。这是在我的Java应用程序中完成的。然后当我从Java调用AutoIt.exe文件时。然后读取.txt文件。获取文件路径URL。然后执行粘贴文件路径所需的操作。然后单击“打开”按钮将文件上载到网站

接下来,我可以将鼠标移动位置的坐标保存在.txt文件中。然后当我启动.exe AutoIt文件时。它读取这个.txt文件并执行“类人”鼠标行为

我只需要知道如何在AutoIt中模拟真实的鼠标/光标移动?一个我可以给出一些坐标的函数


有人能帮忙吗?或者提供任何建议?谢谢。

谢谢你对我的问题的评论。链接到脚本的。它的工作原理令人惊讶

它能产生比我想象的更好的非线性鼠标运动:)

;更平滑的鼠标移动
; 由DtTvB提供
; 易用
功能1($i,$sm)
返回$i^$sm;
endFunc
; 缓解功能
func 2($i,$sm)
回报1-((1-$i)^$sm);
endFunc
; 易进易出功能
func_uuuCalci($i,$sm)
如果($i<0.5),则
返回1($i*2,$sm)/2;
其他的
回报率(uu-2($i-0.5)*2$sm)/2)+0.5;
恩迪夫
endFunc
; 缓退功能
计算函数($i,$sm)
如果($i<0.5),则
返回uu calci($i*2,$sm);
其他的
返回uu calci((1-$i)*2$sm);
恩迪夫
endfunc
; 主要功能
func mouseMove2($x2,$y2)
$x1=鼠标指针(0);
$y1=mouseGetPos(1);
$xv=随机(-100100);
$yv=随机(-100100);
$sm=随机(1.5,2.5);
$m=随机(50160);
对于$i=0至$m
$ci=\u calci($i/$m,$sm);
$co=u calof($i/$m,$sm);
$cx=$x1+($x2-$x1)*$ci)+($xv*$co);
$cy=$y1+($y2-$y1)*$ci)+($yv*$co);
鼠标移动($cx,$cy,1);
下一个
endFunc
; 测试脚本
mouseMove2(512386);

您看过autoit文档了吗?你想做什么就做什么?任何速度参数>0都不会立即移动鼠标。我已读入此“是”。然而,它和人类的相去甚远。人类不会100%直线移动鼠标。我需要一定程度的噪音或随机性。正如《如何在CSS+JS中实现这一点》(带有光标图片)中所述:我通过谷歌搜索发现,这对我来说似乎非常有效
; Smoother Mouse Move
; by the DtTvB

; Ease in function
func __calci1($i, $sm)
    return $i ^ $sm;
endFunc

; Ease out function
func __calci2($i, $sm)
    return 1 - ((1 - $i) ^ $sm);
endFunc

; Ease in out function
func __calci($i, $sm)
    if ($i < 0.5) then
        return __calci1($i * 2, $sm) / 2;
    else
        return (__calci2(($i - 0.5) * 2, $sm) / 2) + 0.5;
    endIf
endFunc

; Ease backward function
func __calof($i, $sm)
    if ($i < 0.5) then
        return __calci($i * 2, $sm);
    else
        return __calci((1 - $i) * 2, $sm);
    endIf
endfunc

; MAIN FUNCTION
func mouseMove2($x2, $y2)
    $x1 = mouseGetPos(0);
    $y1 = mouseGetPos(1);
    $xv = random(-100, 100);
    $yv = random(-100, 100);
    $sm = random(1.5, 2.5);
    $m = random(50, 160);
    for $i = 0 to $m
        $ci = __calci($i / $m, $sm);
        $co = __calof($i / $m, $sm);
        $cx = $x1 + (($x2 - $x1) * $ci) + ($xv * $co);
        $cy = $y1 + (($y2 - $y1) * $ci) + ($yv * $co);
        mouseMove ($cx, $cy, 1);
    next
endFunc

; Test Script
mouseMove2 (512, 386);