相关疑难解决方法(0)

在AJAX驱动的站点上选择并激活正确的控件

因此,我每次访问任何nike.com运动鞋页面(没有HTML链接)时都会尝试将其设置在哪里,它会自动选择我的鞋子尺寸,将其添加到购物车中,然后检查我.

我目前正在尝试使用这个脚本(下面),但是每次我去运动鞋页面时,它都没有正确添加我想要的鞋子尺寸,而是直接在我的购物车中没有任何东西结账.

我被告知我需要将代码与实际的页面HTML匹配,但我不知道该怎么做.请帮忙.

// ==UserScript==
// @name     _Nike auto-buy(!!!) script
// @include  http://*/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

var okayToClickAddtoCart = false;

//-- Assumes that size is a standard <option> tag or similar...
waitForKeyElements (".selectBox-label[value='10']", selectShoeSize);

function selectShoeSize (jNode) {
    jNode.prop ('selected', true);

    okayToClickAddtoCart = true;
}


waitForKeyElements (".add-to-cart.nike-button", clickAddToCart);

function clickAddToCart (jNode) …
Run Code Online (Sandbox Code Playgroud)

javascript jquery greasemonkey tampermonkey

14
推荐指数
1
解决办法
1万
查看次数

移动鼠标单击触发器

我可以在element selector使用时触发click事件trigger

$('element selector').trigger('click')
Run Code Online (Sandbox Code Playgroud)

是否可以触发班次点击.我的意思是shift+鼠标左键单击.

javascript jquery keyboard-events

10
推荐指数
1
解决办法
3197
查看次数

离开iframe时鼠标丢失:导致反向输入

TL; DR问题:

一些javascript如何告诉窗口鼠标按钮已被释放?由于跨域iframe,mouseup事件正在丢失.我可以发现问题已经发生,但我不知道该怎么做才能治愈它.如果我可以强制鼠标指针位置,问题就会消失; 但是不允许javascript更改鼠标指针位置.如果我能"点击鼠标"那么问题就会消失,因为它会取代丢失的鼠标事件; 但在新的mouseup事件上使用dispatchEvent什么都不做.

情况:

  • 任何最新版本的Chrome,任何操作系统.
  • 包含位于内部的iframe的外部文档.根本不需要javascript.
  • 在不同域上托管的外部文档和内部iframe文档,均为https.相同基域的子域不同,但实际上是不同的域.我的示例使用www.pressero.com和client-prototype.dev2.edocbuilder.com.无论证书是否有效(我的是),问题仍然存在.
  • iframe中的文本框输入,位于左边缘或靠近左边缘.标准LTR文本方向.
  • 几乎没有例子:Demo1.这在外部文档中有一点点javascript,以方便更改iframe src.删除此JavaScript根本没有任何效果.

重要限制:

  • 偏偏用铬和铬的浏览器; 不是Firefox,Safari,Edge或IE.
  • 对于所有Chrome客户端是否完全相同,存在一些含糊不清的问题.我个人在运行Chrome 68或69的大约五台不同的Windows PC上亲自复制了相同的行为.一位同事在运行Chrome 69的Mac上以及在同一台Mac上运行的Windows VM中的Chrome 69上获得了略微不同的结果.

触发问题:

  • 用户尝试选择文本框输入中的所有文本,使用鼠标,从文本框末尾开始移动鼠标.
  • 无意中,用户将鼠标指针移过左边缘,因此将iframe移出外部文档.
  • 用户在鼠标指针离开iframe后释放鼠标左键.
  • 发生只有当鼠标被用于选择文本和仅当指示器在左按钮释放的时间的IFRAME外结束.其他选择文本的方法不会导致以下症状:
    • ctrl-A选择全部
    • 进入该领域
    • 使用shift-arrows选择文本
    • 使用鼠标选择文本,但从左到右
    • 使用鼠标选择文本,但在释放鼠标按钮时要小心指针位于iframe内部

制作反向插入文本的另一种方法是:

  • 将鼠标指针放在文本框的左上角.
  • 按住鼠标左键.
  • 输入文字.它是反向插入的,因为在每次击键后,插入点会在刚输入的字符之前重新定位.
  • 这仅仅是为了说明不希望的行为.这显然不是bug,因为它是一种人为的表现方式.

感知症状:

  • 在放开左按钮后键入的文本以相反的顺序插入:即,键入"abcde"将显示为"edcba",插入点位于第一个字符的左侧.

相关症状:

  • 如果正在使用javascript,例如用于调整对象大小或在画布上拖动它的功能,则即使在iframe外部释放左按钮后,拖动仍将继续.即使将指针移回iframe内部,拖动也会继续.
  • mouseup通过在iframe文档中附加alert()鼠标来证明事实确实是丢失的事件body.如果在指针位于iframe内部时释放鼠标按钮,则会发出警报; 如果在指针位于iframe之外时释放鼠标按钮,则不会发生这种情况.

我再次强调,只有CHROME有这种行为.在Firefox,Edge或IE中执行完全相同的操作,无论鼠标指针在何处,都会立即检测到鼠标按钮释放.

尝试了解决方法:

  • 建议用户注意他们的鼠标位置.不是流行的解决方案.
  • 应用于文本框的Javascript以在文本框聚焦时选择所有内容.这使得不必使用鼠标进行选择,因此可以防止用户遇到问题.但是,它使得无法选择文本的一小部分而不是整个文本.
  • 移动文本框使其不会与左边缘对齐.这使得当指针位于iframe之外时用户不太可能放手.

捕获丢失的mouseup事件:

通过将事件处理程序附加到<body>外部文档中,我可以捕获鼠标.然后我可以使用标准的postMessage技术告诉内部iframe窗口发生了mouseup.内部iframe知道在拖动过程中哪个元素处于活动状态,所以这很好.但是,在实际模拟mouseup事件时,我没有任何运气.我在这里试过这个triggerMouseEvent技术.它运行没有错误,但它显然没有做任何事情.这里的演示具有上面的最小示例,以及在外部文档中捕获mouseup的管道,将消息发布到内部文档,并调用:Demo2triggerMouseEvent

另一个奇怪的可能性

在尝试创建最小的示例时,我发现可能以某种方式涉及框模型.Demo1a与上面的demo1相同,只是iframe元素的高度为710px而不是700px.在我的测试机器上, …

iframe google-chrome chromium mouseup

10
推荐指数
1
解决办法
628
查看次数

如何在空的 td 标签上从 javascript(不是 jquery)手动触发 onmousedown 事件

我想使用 java 脚本但不使用 jquery 在空的 td 标签上触发 ommousedown 事件。任何建议请

javascript

7
推荐指数
1
解决办法
2万
查看次数

使用JS模拟单击GMail div按钮

我想模拟点击GMail COMPOSE按钮使用JS而不使用JQuery.

这是按钮:

<div class="T-I J-J5-Ji T-I-KE L3" role="button" tabindex="0" gh="cm" 
style="-webkit-user-select: none;">COMPOSE</div>
Run Code Online (Sandbox Code Playgroud)

这是我的js:

var element = document.getElementsByClassName('T-I-KE')[0];
element.click();
Run Code Online (Sandbox Code Playgroud)

结果:undefined在所有浏览器中

图片:http://i.imgur.com/4IX9DZX.png

已经尝试过:

var event = document.createEvent("MouseEvent");
event.initEvent("click",true,true);
var element=document.getElementsByClassName("T-I-KE")[0];
element.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

结果:true.但没有任何反应.

图片:http://i.imgur.com/pwVqukP.png

javascript gmail click simulate

6
推荐指数
1
解决办法
1338
查看次数

如何模拟 iframe 中元素的*真实*鼠标点击

$(selector).click()结果什么也没发生。
这个答案在浏览器控制台中有效,并将 javascript 上下文设置为 iframe,但不是主页: simulateMouseClick($("iframe").contents().find(selector)) 结果是:

未捕获的类型错误:targetNode.dispatchEvent不是
triggerMouseEvent(:5:20)处的函数
,位于:8:9
处,位于Array.forEach()处
,位于simulateMouseClick(:7:52)处
:1:1处

$("iframe").contents().find(selector).text()给了我预期的内容,所以它是正确的元素。

我怎样才能做到这一点?

编辑:添加此内容是因为人们显然无法阅读:
$("iframe").contents().find(selector).click()
绝对没有效果,因为.click()不会模拟真正的鼠标单击。

javascript jquery

5
推荐指数
1
解决办法
7260
查看次数

单击功能不适用于按钮

我尝试使用 JS 创建一个应用程序来登录https://www.easports.com/fifa/ultimate-team/web-app/#,但无法单击“登录”按钮。

调用按钮元素上的单击。

document.getElementsByTagName("button")[0].click()
Run Code Online (Sandbox Code Playgroud)

什么都没发生。如果我用鼠标移动并单击它,它就会起作用。

javascript

5
推荐指数
1
解决办法
1501
查看次数

"正常"按钮单击方法在Greasemonkey脚本中不起作用?

这是页面上的按钮:

<a id="dispatchOnJobButton" class="ui-btn ui-btn-corner-all ui-shadow ui-btn-up-c" href="#" data-role="button" data-theme="c" data-disabled="false">
<span class="ui-btn-inner ui-btn-corner-all" aria-hidden="true">
<span class="ui-btn-text">Dispatch on next job</span>
</span>
</a>
Run Code Online (Sandbox Code Playgroud)


我需要Greasemonkey来点击它.我尝试了很多不同的方法,但似乎没有任何方法可以解雇它应该运行的任何函数.

var clickEvent = document.createEvent("MouseEvents");
clickEvent.initEvent("click", true, true);
document.getElementById('dispatchOnJobButton').dispatchEvent(clickEvent);

// also tried
document.getElementById('dispatchOnJobButton').click();
// and this
unsafeWindow.document.getElementById('dispatchOnJobButton').click();
Run Code Online (Sandbox Code Playgroud)

关于我可以尝试的其他事情的任何想法?

javascript greasemonkey click

3
推荐指数
1
解决办法
3110
查看次数

如何在带有react-testing-library的react-select组件上触发change事件?

鉴于我无法直接使用内部react-testing-library组件进行测试,我将如何测试使用该组件的组件react-select?例如,如果我有一个基于的值的条件渲染,而该值react-select不渲染传统渲染器<select/>,我还能触发更改吗?

import React, { useState } from "react";
import Select from "react-select";

const options = [
  { value: "First", label: "First" },
  { value: "Second", label: "Second" },
  { value: "Third", label: "Third" },
];

function TestApp() {
  const [option, setOption] = useState(null);
  return (
    <div>
      <label htmlFor="option-select">Select Option</label>
      <Select
        value={option}
        options={options}
        onChange={option => setOption(option)}
      />
      {option && <div>{option.label}</div>}
    </div>
  );
}

export default TestApp;
Run Code Online (Sandbox Code Playgroud)

我什至不确定我应该查询什么。是隐藏的输入吗?

reactjs jestjs react-select react-testing-library react-hooks

3
推荐指数
2
解决办法
3066
查看次数

Scrapy Splash单击按钮不起作用

我想做什么

在avito.ru(俄罗斯房地产网站)上,隐藏人的电话,直到您单击它为止。我想使用Scrapy + Splash收集电话。

范例网址:https//www.avito.ru/moskva/kvartiry/2-k_kvartira_84_m_412_et._992361048

屏幕截图:电话被隐藏

单击按钮后,将显示弹出窗口,并且可以看到电话。

在此处输入图片说明

我使用带有以下Lua脚本的Splash execute API:

function main(splash)
    splash:go(splash.args.url)
    splash:wait(10)
    splash:runjs("document.getElementsByClassName('item-phone-button')[0].click()")
    splash:wait(10)
    return splash:png()
end
Run Code Online (Sandbox Code Playgroud)

问题

未单击该按钮,也不显示电话号码。这是一项微不足道的任务,我无法解释为什么它不起作用。

如果将替换item-phone-button为,则单击可以在同一页面上的其他字段上正常使用js-show-stat。因此,在一般情况下,Javascript 和蓝色的“显示电话”按钮必须具有某种特殊性。

我尝试过的

为了隔离问题,我创建了一个包含最少示例脚本的存储库和用于Splash的docker-compose文件:https : //github.com/alexanderlukanin13/splash-avito-phone

Javascript代码有效,您可以使用Chrome和Firefox中的Javascript控制台进行验证

document.getElementsByClassName('item-phone-button')[0].click()
Run Code Online (Sandbox Code Playgroud)

我已经在Splash 3.0、3.1、3.2版本中尝试过,结果是一样的。

更新资料

我也尝试过:

python scrapy splash-js-render

1
推荐指数
1
解决办法
3050
查看次数