首页 >web前端 >js教程 >如何有效地自动化 AJAX 驱动的网站交互?

如何有效地自动化 AJAX 驱动的网站交互?

Patricia Arquette
Patricia Arquette原创
2024-12-11 21:21:15545浏览

How Can I Effectively Automate AJAX-Driven Website Interactions?

在 AJAX 驱动的网站上选择正确的控件

导航 AJAX 驱动的网站并与之交互对于自动化脚本来说可能具有挑战性。以下是有效自动化此类网站的分步指南:

  1. 观察用户操作:记下您在页面上执行的手动步骤,包括修改或添加的关键元素通过 JavaScript。
  2. 识别页面元素:使用 Firebug 或 Chrome 开发者工具等浏览器工具来检查页面构建并确定关键元素的 CSS/jQuery 选择器。
  3. 操作页面元素: 使用 jQuery 和其他浏览器工具来操作静态 HTML 元素。利用 waitForKeyElements 处理由 JavaScript 或 AJAX 动态更改的元素。

具体示例:Nike 自动购买脚本

目标: 选择特定的鞋子尺码,将其添加到购物车,然后继续结帐每双耐克运动鞋

步骤:

  1. 关键元素识别:

    • 尺寸下拉菜单: div.footwear form.add-to-cart-form span.sizeDropdown a.size-dropdown
    • 目标鞋码:a:contains('10')
    • 添加到购物车按钮:div.footwear form.add-to-cart-form div.product-选择 div.add-to-cart
    • 结账按钮:div.mini-cart div.cart-item-data a.checkout-button:visible
  2. 事件序列:

    • 激活大小下拉列表
    • 选择目标鞋码
    • 等待鞋码显示并添加到购物车
    • 单击结帐按钮

完整脚本:

// ==UserScript==
// @name     Nike Auto-Buy Shoes
// @include  http*://store.nike.com/*
// @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==

var targetShoeSize = "10";

//-- Step 1: Activate Size Dropdown
waitForKeyElements(
  "div.footwear form.add-to-cart-form span.sizeDropdown a.size-dropdown",
  activateSizeDropdown
);

function activateSizeDropdown(jNode) {
  triggerMouseEvent(jNode[0], "mousedown");

  //-- Setup Step 2
  waitForKeyElements(
    "ul.selectBox-dropdown-menu li a:contains('" + targetShoeSize + "'):visible",
    selectDesiredShoeSize
  );
}

//-- Step 2: Select Target Shoe Size
function selectDesiredShoeSize(jNode) {
  if ($.trim(jNode.text()) === targetShoeSize) {
    //-- Trigger triplex event
    triggerMouseEvent(jNode[0], "mouseover");
    triggerMouseEvent(jNode[0], "mousedown");
    triggerMouseEvent(jNode[0], "mouseup");

    //-- Setup Steps 3 and 4
    waitForKeyElements(
      "div.footwear form.add-to-cart-form span.sizeDropdown a.selectBox span.selectBox-label:contains('(" + targetShoeSize + ")')",
      waitForShoeSizeDisplayAndAddToCart
    );
  }
}

//-- Steps 3 and 4: Wait for Shoe Size Display and Add to Cart
function waitForShoeSizeDisplayAndAddToCart(jNode) {
  var addToCartButton = $(
    "div.footwear form.add-to-cart-form div.product-selections div.add-to-cart"
  );
  triggerMouseEvent(addToCartButton[0], "click");

  //-- Setup Step 5
  waitForKeyElements(
    "div.mini-cart div.cart-item-data a.checkout-button:visible",
    clickTheCheckoutButton
  );
}

//-- Step 5: Click the Checkout Button
function clickTheCheckoutButton(jNode) {
  triggerMouseEvent(jNode[0], "click");
}

function triggerMouseEvent(node, eventType) {
  var clickEvent = document.createEvent("MouseEvents");
  clickEvent.initEvent(eventType, true, true);
  node.dispatchEvent(clickEvent);
}

以上是如何有效地自动化 AJAX 驱动的网站交互?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn