无法使用selenium VBA从网页中选择下拉菜单

问题描述 投票:2回答:1

我正在尝试从下拉列表中选择一个选项,该选项在网页中使用Selenium webdriver使用VBA。每个复选框有8个复选框,选择2或3下拉菜单,复选框3和4具有相同的选项,因此我无法在第4个复选框中选择第2个选项。

bot.FindElementsByCss(".bs-FilterControl-item-checkbox")(4).Click ' to select 4th checkbox it works
bot.FindElementByXPath("//*[@value='false']").Click ' this code selects the 2nd option in the 3rd checkbox

所以我尝试了下面的代码,结果为NoSuchElementError:

bot.FindElementByXPath("//*[@value='false'][2]").Click

以下是完整的HTML代码:

<form>
  <div class="bs-FilterControl-flyout">
    <div class="bs-FilterControl-flyout-inner">
      <div class="bs-FilterControl-flyout-gradient"></div>
      <div class="bs-FilterControl-flyout-contents">
        <div class="bs-FilterControl-flyout-header"><button class="Button bs-ButtonLegacy Flex-flex" type="button" href=""><div class="Button-fill bs-ButtonLegacy-fill Box-root Box-background--white Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position: relative;"><div class="TextAligner" style="line-height: 16px; font-size: 13px; flex: 0 0 auto;"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="flex: 1 1 auto; line-height: 0;"><span class="Button-label Text-color--default Text-fontSize--13 Text-fontWeight--medium Text-lineHeight--16 Text-typeface--base Text-wrap--noWrap Text-display--block" style="margin-top: -1px; transform: translateY(0.5px);"><span>Clear</span></span></div></div></button>
          <h2><span>Filters</span></h2><button class="Button bs-ButtonLegacy Button--color Button--color--blue Flex-flex" type="submit" href=""><div class="Button-fill bs-ButtonLegacy-fill Box-root Box-background--blue Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--baseline Flex-direction--row" style="position: relative;"><div class="TextAligner" style="line-height: 16px; font-size: 13px; flex: 0 0 auto;"></div><div class="Box-root Flex-flex Flex-alignItems--baseline Flex-direction--row Flex-justifyContent--flexStart" style="flex: 1 1 auto; line-height: 0;"><span class="Button-label Text-color--white Text-fontSize--13 Text-fontWeight--medium Text-lineHeight--16 Text-typeface--base Text-wrap--noWrap Text-display--block" style="margin-top: -1px; transform: translateY(0.5px);"><span>Done</span></span></div></div></button></div>
        <div
          class="bs-FilterControl-list">
          <div class=""><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="created"><span>Date</span></label>
            <div class="bs-FilterControl-item-content">
              <div class="bs-FilterControl-item-children">
                <select>
                  <option value="inTheLast">is in the last</option>
                  <option value="equals">is equal to</option>
                  <option value="between">is between</option>
                  <option value="isOnOrAfter">is on or after</option>
                  <option value="isBefore">is before</option>
                  <option value="isBeforeOrOn">is before or on</option>
                </select>
                <div class="bs-FilterControl-input-container">
                  <div class="bs-FilterControl-inTheLast-container"><span><input class="bs-FilterControl-textInput" type="text" value=""></span>
                    <select class="bs-FilterControl-unitSelect">
                      <option value="days">days</option>
                      <option value="months">months</option>
                    </select>
                  </div>
                </div>
                <div class="bs-FilterControl-timezone">
                  <div class="Box-root">
                    <div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart" style="margin-left: -8px;">
                      <div class="Box-root Box-hideIfEmpty Margin-left--8">
                        <div class="bs-FilterControl-timezoneLabel"><span>Timezone:</span></div>
                      </div>
                      <div class="Box-root Box-hideIfEmpty Margin-left--8"><label class="Radio bs-FilterControl-timezoneRadio" for="radio46"><input title="CST/CDT - Chicago" class="Radio-source" id="radio46" type="radio"><div class="Radio-box Box-root Flex-flex Flex-alignItems--center" style="height: 20px;"><div class="Radio-target Box-root Box-background--blue"><div class="Radio-dot Box-root Box-background--white"></div></div></div><div class="Radio-copy Box-root Margin-left--8"><span class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-typeface--base Text-wrap--wrap Text-display--block">CST/CDT</span></div></label></div>
                      <div
                        class="Box-root Box-hideIfEmpty Margin-left--8"><label class="Radio bs-FilterControl-timezoneRadio" for="radio47"><input title="UTC - UTC" class="Radio-source" id="radio47" type="radio"><div class="Radio-box Box-root Flex-flex Flex-alignItems--center" style="height: 20px;"><div class="Radio-target Box-root Box-background--white"><div class="Radio-dot Box-root"></div></div></div><div class="Radio-copy Box-root Margin-left--8"><span class="Text-color--default Text-fontSize--14 Text-fontWeight--medium Text-lineHeight--20 Text-typeface--base Text-wrap--wrap Text-display--block">UTC</span></div></label></div>
                  </div>
                </div>
              </div>
            </div>
          </div>
      </div>
      <div class=""><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="amount"><span>Amount</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="equals">is equal to</option>
              <option value="between">is between</option>
              <option value="greaterThan">is greater than</option>
              <option value="lessThan">is less than</option>
            </select>
            <div class="bs-FilterControl-input-container"><span> </span><span><input class="bs-FilterControl-textInput" type="text" value=""></span></div>
          </div>
        </div>
      </div>
      <div class="bs-FilterControl-item--expanded"><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="paid"><span>Status</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="true">is successful</option>
              <option value="false">is failed</option>
              <option value="pending">is pending</option>
            </select>
          </div>
        </div>
      </div>
      <div class="bs-FilterControl-item--expanded"><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="refunded"><span>Refunded</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="true">is fully refunded</option>
              <option value="false">is not refunded</option>
              <option value="partial">is partially refunded</option>
            </select>
          </div>
        </div>
      </div>
      <div class=""><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="captured"><span>Captured</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="true">has been captured</option>
              <option value="false">has not been captured</option>
            </select>
          </div>
        </div>
      </div>
      <div class=""><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="disputed"><span>Disputed</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="true">is disputed</option>
              <option value="false">is not disputed</option>
            </select>
          </div>
        </div>
      </div>
      <div class=""><label class="bs-FilterControl-item-label"><input class="bs-FilterControl-item-checkbox" type="checkbox" value="source"><span>Payment source</span></label>
        <div class="bs-FilterControl-item-content">
          <div class="bs-FilterControl-item-children">
            <select>
              <option value="card">Card</option>
              <option value="bank_account">Bank Account</option>
              <option value="ach_credit_transfer">ACH Credit Transfer</option>
              <option value="ach_debit">ACH Debit</option>
              <option value="alipay">Alipay</option>
              <option value="bancontact">Bancontact</option>
              <option value="eps">EPS</option>
              <option value="giropay">Giropay</option>
              <option value="ideal">iDEAL</option>
              <option value="multibanco">Multibanco</option>
              <option value="p24">P24</option>
              <option value="sofort">SOFORT</option>
              <option value="three_d_secure">3D Secure</option>
            </select>
          </div>
        </div>
      </div>
    </div>
  </div>
  </div>
  </div>
</form>
vba excel-vba selenium-webdriver web-scraping
1个回答
2
投票

尝试

bot.FindElementByXPath("//*[text()='is not refunded']").Click

它匹配下拉选项所需文本上的元素。

© www.soinside.com 2019 - 2024. All rights reserved.