<p>xpath根本就错了</p>
<p>以下是页面片段:</p>
<pre><code><form id="vCSS_mainform" method="post" name="MainForm" action="/ProductDetails.asp?ProductCode=MCFFGB" onsubmit="javascript:return QtyEnabledAddToCart_SuppressFormIE();">
<img src="/v/vspfiles/templates/MAKO/images/clear1x1.gif" width="5" height="5" alt="" /><br />
<table width="100%" cellpadding="0" cellspacing="0" border="0" id="v65-product-parent">
<tr>
<td colspan="2" class="vCSS_breadcrumb_td"><b>
&nbsp;
<a href="http://www.makospearguns.com/">Home</a> >
</code></pre>
<p>您可以看到,带有<code>id</code>的元素是<code>"v65-product-parent" is of type</code>表<code>and has subelement</code>tr`。在</p>
<p>只有一个元素具有这样的<code>id</code>(否则它将是断开的xml)。在</p>
<p>xpath期望<code>tbody</code>作为给定元素(表)的子元素,而整个页面中没有。在</p>
<p>这可以通过</p>
^{pr2}$
<h2>Chrome是如何使用XPath的?在</h2>
<p>如果您只需通过</p>
<pre><code>$ wget http://www.makospearguns.com/product-p/mcffgb.htm
</code></pre>
<p>检查它的内容,它不包含一个名为<code>tbody</code>的元素</p>
<p>但是如果你使用Chrome开发工具,你会发现一些。在</p>
<p>它是怎么来的?在</p>
<p>如果JavaScript在浏览器中发挥作用并生成一些页面内容,则通常会发生这种情况。但正如legostromtropor所指出的,这不是我们的情况,这次是浏览器修改文档以使其正确。在</p>
<h2>如何在浏览器中动态修改页面内容?在</h2>
<p>你必须给某种浏览器一个机会。E、 如果你使用<code>selenium</code>,你就会得到它。在</p>
<h2><code>byselenium.py</code></h2>
<pre><code>from selenium import webdriver
from lxml import html
url = "http://www.makospearguns.com/product-p/mcffgb.htm"
xpath = '//*[@id="v65-product-parent"]/tbody/tr[2]/td[2]/table[1]/tbody/tr/td/table/tbody/tr[2]/td[2]/table/tbody/tr[1]/td[1]/div/table/tbody/tr/td/font/div/b/span/text()'
browser = webdriver.Firefox()
browser.get(url)
html_source = browser.page_source
print "test tbody", "tbody" in html_source
tree = html.fromstring(html_source)
text = tree.xpath(xpath)
print text
</code></pre>
<p>什么指纹</p>
<pre><code>$ python byselenimum.py
test tbody True
['$149.95']
</code></pre>
<h2>结论</h2>
<p>当谈到浏览器中的更改时,Selenium非常棒。不过,这是一个有点重的工具,如果你能做得更简单,就那样做。乐高Stormrtoop提出了这样一个更简单的解决方案来处理简单的网页。在</p>