【问题标题】:Unable to enter value in search box using selenium via VBA无法通过 VBA 使用 selenium 在搜索框中输入值
【发布时间】:2018-09-07 20:22:59
【问题描述】:

您好,我是通过 VBA 接触 selenium 的新手,因此我试图通过登录网页导航并将数据提取到 excel 文件中来自动化流程。问题是登录后我无法在搜索框中输入值。 这是我尝试过的代码

bot.FindElementById("placeholder-3vgh2").SendKeys "AAA"
bot.FindElementByClass(".public-DraftStyleDefault-block.public-DraftStyleDefault-ltr").SendKeys "AAA"
bot.FindElementByClass("public-DraftStyleDefault-block public-DraftStyleDefault-ltr").SendKeys "AAA"
bot.FindElementByXPath("//*[@data-contents='true']").SendKeys "AAA"
bot.FindElementByXPath("//*[@class='public-DraftStyleDefault-block public-DraftStyleDefault-ltr']").SendKeys "AAA"
bot.FindElementByXPath("//*[@data-offset-key='dtaef-0-0'][2]").SendKeys "AAA"

这是 HTML 代码

<div class="db-World-topContent Box-root Box-background--surface Padding-vertical--20">
  <div class="Box-root Flex-flex Flex-alignItems--center Flex-justifyContent--spaceBetween">
    <div class="db-SearchField db-SearchField--tokenizable">
      <div class="db-SearchField-input db-SearchField-input--highlighted">
        <div class="DraftEditor-root">
          <div class="DraftEditor-editorContainer">
            <div aria-describedby="placeholder-3vgh2" class="notranslate public-DraftEditor-content" contenteditable="true" role="textbox" spellcheck="false" style="outline: none; user-select: text; white-space: pre-wrap; word-wrap: break-word;">
              <div data-contents="true">
                <div class="" data-block="true" data-editor="3vgh2" data-offset-key="dtaef-0-0">
                  <div data-offset-key="dtaef-0-0" class="public-DraftStyleDefault-block public-DraftStyleDefault-ltr"><span class="db-SearchField-token" data-offset-key="dtaef-0-0"><span data-offset-key="dtaef-0-0"><span data-text="true">is:</span></span>
                    </span>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div><span></span><span></span></div><span></span></div>
    <div class="Box-root">
      <div class="Box-root Flex-flex Flex-alignItems--center Flex-direction--row Flex-justifyContent--flexStart" style="margin-left: -12px;">
        <div class="Box-root Box-hideIfEmpty Margin-left--12"></div>
        <div class="Box-root Box-hideIfEmpty Margin-left--12">
          <div class="Box-root Padding-right--8">
            <div class="db-FeedbackInput-container Card-root Card-shadow--small">
              <div class="db-FeedbackInput-box Box-root Box-background--offset Padding-horizontal--8 Padding-vertical--4 Flex-flex Flex-alignItems--center">
                <div class="Box-root Margin-right--8 Flex-flex"><span class="db-FeedbackInput-defaultIcon"></span></div>
                <div class="TruncatedText" style="overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"><span class="Text-color--gray400 Text-fontSize--14 Text-fontWeight--regular Text-lineHeight--20 Text-typeface--base Text-wrap--wrap Text-display--inline"><span>Feedback about this page?</span></span>
                </div>
              </div>
            </div>
          </div>
        </div>
        <div class="Box-root Box-hideIfEmpty Margin-left--12">
          <div>
            <div class="Box-root Flex-flex">
              <div class="Box-root Flex-flex"><button aria-label="Documentation" class="db-DocumentationMenu-root" tabindex="-1"></button></div>
            </div>
          </div>
        </div>
        <div class="Box-root Box-hideIfEmpty Margin-left--12">
          <div>
            <div class="Box-root Flex-flex">
              <div class="Box-root Flex-flex">
                <div tabindex="-1" style="outline: none;"><button aria-label="Notifications" class="db-Notifications-button"><span class="db-Notifications-icon db-Notifications-icon--empty"></span></button></div>
              </div>
            </div>
          </div>
        </div>
        <div class="Box-root Box-hideIfEmpty Margin-left--12">
          <div>
            <div class="Box-root Flex-flex">
              <div class="Box-root Flex-flex"><button class="bs-Button bs-DeprecatedButton db-UserMenu" aria-label="User menu" type="button" tabindex="-1"><div class="db-GravatarImage db-UserMenu-image db-GravatarImage--none"></div></button></div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div><span class="db-World-topContent--left"></span><span class="db-World-topContent--right"></span></div>

这是 iframe 的外层HTML:

&lt;iframe src="https://js.stripe.com/v2/m/outer.html#ping=false" style="width: 1px !important; height: 1px !important; position: absolute !important; left: -10000px !important; top: -1000px !important;"&gt;&lt;/iframe&gt;

【问题讨论】:

  • 我没有看到输入标签。您应该在哪个元素中放置文本?
  • 它就像一个搜索框,当我输入某些内容时,它会立即尝试在我输入时查找,就像谷歌搜索框一样。我已经粘贴了搜索框的整个代码。
  • 如果您在页面上选择框并右键单击检查元素,那么问题的确切元素是什么?

标签: vba excel selenium-webdriver web-scraping


【解决方案1】:

按照我们的调试会话尝试:

bot.FindElementByCss(".notranslate.public-DraftEditor-content").SendKeys "AAA"

【讨论】:

  • 以下行有效,因为我可以在搜索框 bot.FindElementByCss(".public-DraftStyleDefault-block.public-DraftStyleDefault-ltr").Click 上看到光标 - 但是在那之后我无法使用发送密钥,这是我使用的代码 = bot.FindElementByCss(".public-DraftStyleDefault-block.public-DraftStyleDefault-ltr").SendKeys "AAA"
  • 您好 Qharr,抱歉耽搁了,我尝试了上述两个代码,但收到错误消息。对于此代码:bot.FindElementByCss(".public-DraftStyleDefault-block.public-DraftStyleDefault-ltr").Text = "yourText" = 它显示“编译错误:不允许分配给常量”对于此代码:bot.FindElementByCSS( ".db-SearchField-token").SendKeys "yourText" = 它说 "NoSuchElementError Element not found for Css = ..db-SearchField-token
  • 不,它不在 frame/form/ iframe 标签中。实际上,当我单击搜索框时,会出现下拉条件列表,例如(Is,last4,date,email 等等...),但它不是下拉列表,因为我可以输入值(案例编号)然后它会自动加载结果。在我的情况下,当我们手动工作时,我从 excel 中复制案例编号并将其粘贴到搜索框中,然后立即给我结果
  • 嗨,我刚刚在检查页面中注意到,当向下滚动到最底部时,我看到一个标签为 iframe,但是当我执行 Ctrl+shift+C 并移动光标时,什么都没有突出显示。
  • 这对我有用 bot.FindElementByCss(".notranslate.public-DraftEditor-content").SendKeys "AAA"
猜你喜欢
  • 2023-01-08
  • 2018-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 2021-10-22
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多