脚本触发textarea点击无效,isTrusted属性相关问题咨询
如何通过脚本触发网站textarea的真实点击效果?
我需要在某特定网站上触发textarea的点击功能:用户手动点击该textarea时,它会进入编辑状态,占位符“A little bit about you...”消失,下方会出现“Save”和“Cancel”按钮。
点击前的textarea:
点击后的textarea:
我尝试了各种脚本触发点击的方法,但全都无效。更奇怪的是,添加全局click事件监听器无法记录该textarea的点击——这段代码在网站其他元素上正常工作,唯独对这个textarea不起作用:
document.addEventListener('click', function(event) { console.log(event.target); }, true);
由于该元素没有ID,我通过以下方式定位它:
var targetElement = document.getElementsByClassName('textarea__input')[1];
我尝试调用.focus()和.click()方法,毫无反应;甚至模拟类人点击的代码也没用:
var simulateMouseEvent = function (element, eventName, coordX, coordY) { element.dispatchEvent(new MouseEvent(eventName, { view: window, bubbles: true, cancelable: true, clientX: coordX, clientY: coordY, button: 0 })); }; var targetElement = document.getElementsByClassName('textarea__input')[1]; if (targetElement) { try { var box = targetElement.getBoundingClientRect(), coordX = box.left + (box.right - box.left) / 2, coordY = box.top + (box.bottom - box.top) / 2; simulateMouseEvent(targetElement, "mousedown", coordX, coordY); simulateMouseEvent(targetElement, "mouseup", coordX, coordY); simulateMouseEvent(targetElement, "click", coordX, coordY); } catch (error) { console.error("Error clicking text button:", error); } }
所有方法都无效,只有手动点击时textarea才会展开并显示“Save”和“Cancel”按钮。为什么点击该textarea时事件监听器没有任何日志?
对应的HTML代码如下:
<section class="settings-section is-opened" data-qa-role="settings-section-about"> <header class="settings-section__header"> <div class="settings-section__title" data-qa-role="settings-section-title"> <h1 class="header-2"><span>About Me</span></h1> </div> <span class="settings-section__icon" role="presentation"> <span class="icon icon--size-m settings-section__open-handler" role="presentation" data-qa-role="icon" data-qa-icon-name="generic-chevron-down"> <svg data-origin="pipeline" viewBox="0 0 32 32" fill="none"> <path fill-rule="evenodd" clip-rule="evenodd" d="M15.97 18.257l7.093-7.067a2.016 2.016 0 013.367.89c.188.691-.009 1.43-.516 1.937l-8.512 8.493a2.012 2.012 0 01-2.85 0l-8.513-8.493a1.994 1.994 0 01.049-2.778 2.013 2.013 0 012.788-.049l7.094 7.067z" fill="currentColor"></path> </svg> </span> </span> </header> <div class="settings-section__main" style="--settings-section-content-height:72px;"> <div class="settings-section__content"> <div class="settings-section__entry"> <section class="settings-fieldset settings-fieldset--about" data-qa-role="about-fieldset"> <div class="settings-fieldset__main"> <div class="settings-fieldset__field"> <div class="textarea has-autoheight has-placeholder" data-qa-role="profile-edit-about"> <div class="textarea__inner"><textarea class="textarea__input" placeholder="A little bit about you..." autocomplete="off" maxlength="300" dir="auto" style="height: 72px; min-height: 66px;">This is my teext</textarea><textarea class="textarea__ghost" aria-hidden="true" role="none"></textarea></div> </div> </div> </div> </section> </div> </div> </div> </section>
更新
我发现了问题所在:网站可以检测到点击是由脚本触发而非真实用户操作。我记录点击事件的代码如下:
const textarea = document.querySelector('.textarea__input'); textarea.addEventListener('click', event => { console.log('Click event triggered on textarea:', event); });
手动点击时的日志:
通过控制台调用.click()方法时的日志:
ChatGPT指出:isTrusted属性为false表明事件由脚本生成,而非用户操作,这是浏览器的安全特性。但我看到有资料称网站无法访问isTrusted信息,请问如何通过脚本触发与手动点击完全相同的事件?
内容的提问来源于stack exchange,提问作者HavanaSun
相关产品推荐
相关产品推荐

