使用Selenium Web Driver和XPath将文本存储在变量中

时间:2013-11-20 14:45:32

标签: vba xpath selenium selenium-webdriver

我试图在VBA中使用此代码从网站上获取邮政编码:

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

然而,这给了我错误:

enter image description here

我假设这个错误只是一种告诉我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工作或者是否有相同的东西?我希望这很有意义,不应该得到它自己的问题。

1 个答案:

答案 0 :(得分:3)

我不完全确定这里有什么问题,但如果我可以提供另一种选择..使用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

中查看它