【问题标题】:Store text in variable using Selenium Web Driver and XPath使用 Selenium Web 驱动程序和 XPath 将文本存储在变量中
【发布时间】:2013-12-04 15:00:26
【问题描述】:

我正在尝试使用 VBA 中的此代码从网站获取邮政编码:

variableName = driver.findElement(By.XPath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]"))

然而,这给了我错误:

我假设这个错误只是告诉我我的 XPath 错误的一种简单方式。由于我不是 XPath 的天才,我只是安装了 FireBug 和 FirePath 插件,它们为我生成了上述 XPath。问题是,当我将 XPath 输入 FirePath .//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2] 并点击评估时,它可以找到邮政编码就好了。

有什么我可能做错的吗?这是我试图从中获取邮政编码的网站背后的代码:

<div id="T_F2">
  <fieldset>
    <div class="txt_align_centre padding_bottom_5">
      <div class="txt_align_left">
        <div class="err_row">
          <span class="red_text_v err_formw">
            You searched for telephone number 02075884760.
            <br></br>
          </span>
        </div>

        <div class="row">
          <span class="form_label">
            <label>
              CSS Exchange:
            </label>
          </span>
          <span class="formw_nonedit">                        
          </span>
        </div>

        <div class="row">
          <span class="form_label">
            <label>
              District code:
            </label>
          </span>
          <span class="formw_nonedit">
            CL 
          </span>
        </div>

        <div class="row">
          <span class="form_label">
            <label>
              Post code:
            </label>
          </span>
          <span class="formw_nonedit">
            EC2M 3WA
          </span>
        </div>

        <div class="row">
          <span class="form_label">
            <label>
              PCP Id:
            </label>
          </span>
          <span class="formw_nonedit">
          </span>
        </div>
        ...
      </div>
    </div>
  </frameset>
</div>

row 有几个div。每行都有一个名为form_labelformw_nonedit 的跨度类。我对包含邮政编码 EC2M 3WA 的 formw_nonedit span 类感兴趣。

编辑:我修改了我的代码以使用 VBA 远程控制而不是 VBA WebDriver,因为我对如何以这种方式解决问题有了更好的了解。因此,我将driver.findElement(By.XPath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]")) 更改为selenium.findElement(By.XPath(".//*[@id='T_F2']/fieldset/div[1]/div/div[4]/span[2]"))。这会导致错误:对象不支持此属性或方法。只是想知道如何让 findElement 工作或者是否有等价物?我希望这足够相关,不值得提出自己的问题。

【问题讨论】:

  • 在尝试获取邮政编码之前您在做什么?当您尝试访问它时,可能需要的元素不在 DOM 中。所需的 XPath 定位器可能看起来像 .//*[@id='T_F2']//div[@class='row'][contains(text(),'Post code')]/span[@class=formw_nonedit']
  • 我实际上在做很多事情:登录网站、进入仪表板、选择工具、填写表格,然后进入包含我想要的邮政编码的结果页面。
  • 对我的问题进行了编辑
  • 就您刚刚对代码所做的 RC 修改而言,您正陷入一大堆不同的问题中。不要使用 RC。无论如何,该错误的问题在于旧版本的 Selenium 没有“findElement”或“findElements”的概念,它的工作方式完全不同。你试过下面的答案吗?它奏效了吗?为什么不?它有什么不同?
  • 当我尝试以下操作时,我只是遇到了与以前相同的问题

标签: vba xpath selenium selenium-webdriver


【解决方案1】:

我不完全确定这里出了什么问题,但如果我可以提供替代方案.. 使用 CSS。这是faster, cleaner,而且更好。

在您的情况下,您的选择器将是,(假设该位置在列表中是静态的。)

div#T_F2 div.txt_align_left > div.row:nth-child(4)

所以你可以使用

text = driver.findElement(By.CssSelector("div#T_F2 div.txt_align_left > div.row:nth-child(4)").getText();

查看它在this fiddle 中的工作

【讨论】:

  • 请原谅我的外壳特性。我是 Java 程序员而不是 VBA 程序员。我认为 VBA 使用 PascalCase,所以只需自己更改大小写即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多