【问题标题】:How to locate a name using xpath out of three items?如何使用 xpath 从三个项目中查找名称?
【发布时间】:2017-08-08 08:42:18
【问题描述】:

我已经编写了一个 xpath 来从 th 标签中找到一个名称,但问题是在一个“th”标签内附加了三个项目,由“br”标签分隔。如何仅找到第一个项目,在这种情况下是三个项目中的名称?这是我尝试过的:

//td[@class='data']/table//th

项目中的元素是:

<td class="data" valign="top" nowrap="">

                                        <table width="350">

                                            <tbody><tr>    
                                                <td valign="top" nowrap="">Owner Name &amp;<br>Mailing Address:</td>
                                                <th align="left" valign="top" nowrap="">

                                                <!-- ---------- OWNER NAME ---------- -->
                                                PADILLA ISAI &amp; JOSEFINA<br>


                                                <!-- ---------- MAILING ADDRESS ---------- -->

                                                        <!-- ---------- MAILING ADDRESS (MAIL TO) ---------- -->


                                                        <!-- ---------- MAILING ADDRESS (ADDR1 AND ADDR2) ---------- -->
                                                        8227 FINDLAY ST<br>


                                                        <!--
                                                        ------------------------------------------------
                                                        'RA 09/11/2012: 
                                                            Changed order of Owner / Address to :

                                                                Owner Name(s)
                                                                MailTo
                                                                Addr_1
                                                                Addr_2
                                                                City
                                                                State
                                                                Zip
                                                                Country
                                                        ------------------------------------------------
                                                        8227 FINDLAY ST
                                                        ------------------------------------------------
                                                        -->

                                                        <!-- ---------- MAILING ADDRESS (CITY-STATE-ZIP OR COUNTRY)---------- -->
                                                        HOUSTON&nbsp;TX&nbsp;77017-2328<br>

                                                            <!--<br />-->


                                               </th>
                                            </tr>
                                        </tbody></table>

                                    </td> 

用我的表达我得到的结果是:

DURAN FRANCISCO & AURORA
4010 BALMORHEA AVE
HOUSTON TX 77039-2510

但我希望得到的只是:

DURAN FRANCISCO & AURORA

一般情况下我可能会选择:

//td[@class='data']/table//th/text()[1]

但是,selenium 也不支持文本索引。我该怎么做才能仅从 th 标签中获取名称?

【问题讨论】:

  • 你能试试这个吗..-->//td[@class='data']/table//th[1]
  • IMO,在准备样本 HTML 时,DOM 格式被破坏了。我可以看到tdbr 标签相互重叠。 &lt;td valign="top" nowrap=""&gt;Owner Name &amp;amp;&lt;br&gt;Mailing Address:&lt;/td&gt; &lt;th align="left" valign="top" nowrap=""&gt; &lt;!-- ---------- OWNER NAME ---------- --&gt; PADILLA ISAI &amp;amp; JOSEFINA&lt;br&gt;我错过了什么吗?
  • 我试着让它看起来有点好看。会更新它原来的样子。

标签: selenium xpath selenium-webdriver


【解决方案1】:

试试下面的代码,如果它不会返回预期的结果,请告诉我:

element = driver.find_element_by_xpath("//td[@class='data']/table//th")
print(driver.execute_script("return arguments[0].childNodes[2].textContent", element).strip())

【讨论】:

  • 我期待 :)
【解决方案2】:

我有以下方法可以直接执行 selenium 不支持的 xpath:

JavascriptExecutor js = (JavascriptExecutor)driver;
Object message = js.executeScript("var value = document.evaluate(\"//td[@class='data']/table//th/text()[1]\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;");
System.out.println(message.toString());

还有问题告诉我:)

this answer获取更多详情

【讨论】:

  • 你导入了import org.openqa.selenium.JavascriptExecutor; 包吗?你用的是java吧?
  • 对不起先生,我正在使用python。
  • 你能不能像driver.execute_script("var value = document.evaluate(\"//td[@class='data']/table//th/text()[1]\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;");一样尝试使用同样的返回值
  • 努力将它融入我的 python 脚本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多