PHP Goutte. Изменить поле выбора и зафиксировать Ajax изменения - парсинг BigCommerce - PullRequest
0 голосов
/ 10 июля 2020
• 1000 1004 * Когда поле выбора изменено, оно ПОСТАВЛЯЕТ идентификатор продукта и идентификатор варианта, затем страница обновляется.

Как я могу изменить c это поле выбора? Я попытался реплицировать POST, но у меня появляется ошибка токена безопасности, поскольку я подозреваю, что он блокирует междоменные сценарии.

URL-адрес страницы не обновляется, поэтому я не могу даже l oop через страницы, код формы здесь

<div class="productView-options-wrap" data-product-option-change="" style="">
    <div class="productView-options-inner">
        <div class="form-field" data-product-attribute="set-select">
            <label class="form-label form-label--alternate form-label--inlineSmall" for="attribute_select_176">
                Color: <small>Required</small>
            </label>

            <select class="form-select form-select--small" name="attribute[176]" id="attribute_select_176" required="">
                <option value="">View Options</option>
                <option data-product-attribute-value="1126" value="1126">1 Standard (Most Popular)</option>
                <option data-product-attribute-value="1127" value="1127">1 Standard</option>
            </select>
        </div>

    </div>
</div>


    <div class="form-field form-field--increments">
        <label class="form-label form-label--alternate" for="qty[]">
            Quantity:
        </label>
        <div class="form-increment" data-quantity-change="">
            <input class="form-input form-input--incrementTotal" id="qty[]" name="qty[]" type="tel" value="1" data-quantity-min="1" data-quantity-max="0" min="1" pattern="[0-9]*" aria-live="polite">
        </div>
    </div>

<div class="form-action">
    <input id="form-action-addToCart" data-wait-message="Adding to cart…" class="button button--primary" type="submit" value="Add to Cart">
</div>

Вызываемый ajax:

   var formData = {
  "action": "add",
  "attribute[176]": "1130",
  "product_id": "931",
  "qty[]": "1"
};
$.post('https://example.com/remote/v1/product-attributes/931', formData)
  .done (showResult)
  .fail(showError);

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

В итоге я переписал это, используя Symfony DomCrawler и Guzzle

. Мне удалось сохранить токен безопасности и отправить его с помощью вызова ajax и обработать данные таким образом. 700+ продуктов примерно за 10 минут.

0 голосов
/ 10 июля 2020

Есть 2 способа go сделать это.

Вы можете использовать API V3, чтобы получить все продукты, включая их варианты. Вы можете использовать эти данные, чтобы попасть в конечную точку параметров продукта / варианта, где вы сможете прочитать все метаданные параметров. Таким образом вы сможете вручную воссоздать HTML, хотя на самом деле это не идеально.

Альтернативой может быть определение SKU каждого варианта продукта и добавление его в качестве параметра запроса к URL-адрес страницы продукта.

Если вы включите артикул в качестве параметра запроса на страницу продукта, он отобразит предварительно выбранные конфигурации параметров.

Я немного не понимаю, что вы пытаетесь выполнить sh с очищенными данными? Если вы собираетесь выполнять какие-либо действия с ним, вы, скорее всего, столкнетесь с другими проблемами CORS.

...