【问题标题】:How to simulate user click programmatically on this specific website?如何在此特定网站上以编程方式模拟用户点击?
【发布时间】:2019-12-11 11:06:21
【问题描述】:

我正在尝试在类似日期选择器的元素上使用 javascript 触发点击。 这适用于 puppeter 无头浏览器集成,但首先我需要我的代码在 devtools 控制台中工作。

但是它不起作用...不像正常的手动点击。 我已经尝试了好几个小时了

特定网站在这里(使用反应)

https://www.homeaway.co.uk/p4787689

您必须单击“签入停留”才能出现模式日期选择器,然后我的意图是在日期数字之一上执行 javascript 单击。 “1”、“2”、“3”……在下方可见

This is how date picker looks like

单个日期条目(我们要点击)的html结构如下: 每个日期(01.08.2019、02.08.2019 等)都是“td”行。它的班级甚至在名称上都有“可点击”。所以它应该是我们要点击的元素。

<td class="day no-gridlines selectable clickable" data-column="4" data-row="1" tabindex="-1" aria-label="August 9, 2019" aria-hidden="false">

    <div class="calendar-template calendar-template--show-availability calendar-template--show-selectability">
        <div class="day-template day-template--available-stay day-template--available-checkin-checkout">
            <div class="day-template__border">
            </div>
            <div class="day-template__content">
                <div class="day-template__day">9</div>
            </div>
        </div>
    </div>
</td>

我已尝试获取这些 TD 元素中的每一个:

document.querySelectorAll('.day.no-gridlines.selectable.clickable')

然后点击其中一个

document.querySelectorAll('.day.no-gridlines.selectable.clickable')[4].click()

但它不起作用?

我试图检查事件点击处理程序,但是该网站正在使用一些框架..所以对于像我这样的初学者来说非常困难。

也许有经验的人可以建议,为什么我不能在那个网站上执行点击?

【问题讨论】:

  • 你检查过...[4]实际上是什么吗?它是一个可点击的元素吗?它实际上在 DOM 中吗? 你确定
  • 我不确定我是否理解您尝试以编程方式点击商业网站的方式。您是否尝试将此站点加载到 iframe 或其他内容中,然后在 iframe 上执行操作? Javascript 有很多针对跨站点脚本的保护措施,因此让一个不是从该网站本身加载的脚本在该站点上执行操作基本上是不可能的,除非该站点设置了允许您从您的站点执行此操作的策略...如果您能解释一下您想要做得更好的地方,我们可以看看我们是否可以提供帮助!
  • 我正在使用 puppeter(无头浏览器)进行自动化。首先,我在常规浏览器的控制台中测试选择器和代码,特别是当某些东西不工作时(比如现在)。如果没有 onclick 处理程序,日期选择器还能如何工作?这显然取决于点击。我手动点击日期,它会突出显示,我可以选择结帐日期。调用 click() 返回 undefined .. 没有任何其他错误,所以我猜元素是可点击的。在这里真的没有想法。有没有其他方法可以用来捕获点击网站? click() 没有涵盖的内容?
  • 也许日期选择器是在 DOM 就绪或窗口加载完成时生成的。所以你必须在 datepicker 之后推迟你的代码(如果你可以访问 datepicker 回调函数)或者把你的代码放在一个计时器中并在文档加载几秒钟后触发它。
  • 不幸的是,这不是问题所在。页面加载控制台后,我在 chrome 中手动测试它。所以 onload() 不是一个因素,所有库都已加载并完全呈现页面

标签: javascript jquery dom frontend


【解决方案1】:

如果你显示一个页面会更好,那里有这些可点击的元素(因为在你的链接上我什至找不到一个可点击的类)......无论如何,在控制台中试试这个:

javascript:function AutoClickOnThese()
{
    var targets = document.querySelectorAll(".clickable");
    Array.prototype.forEach.call(targets, function(target,index){
        //If the clicks start some ajax request, these sure will be restricted
        //if too much running in an unrealistic time
        //... if there are no ajax, just delete the timeout stuff
        setTimeout(function()
        {
            target.onclick();
            //target.click(); //if not working the onclick
        }, index*600);
    });
};
AutoClickOnThese();

【讨论】:

  • 感谢您的回答!在我的链接中,您可以选择页面右侧的“入住”和“退房日期”。当您单击其中一个时,将出现一个模式日历弹出窗口。这是关于弹出的模式日历。我想模拟点击那里可用的日期之一,例如“2019 年 8 月 3 日”。我提到的 HTML 结构是该模式日历的一部分 - 每个日期都是“TD”行。我尝试通过注释/取消注释来运行您的代码,但没有成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
相关资源
最近更新 更多