Selenium python递归文本刮

时间:2015-11-08 16:01:43

标签: python selenium

以下是此链接here

中的一小段html
<div class="price-view">
  <div class="price component component-3 clearfix list-and-sale-price">
    <div class="list-price float-left mR20px striken">
      <label>Was</label>
      <div class="value">$250.00</div>
    </div>
    <div class="sale-price float-left">
      <label>Now</label>
      <div class="value">$150.00</div>
    </div>
  </div>
</div>

我想在这个例子中将价格拉到150美元,但我想在this链接中打印$ 575相同的代码

<div class="price-view">
  <div class="price component component-3 clearfix">
    <div class="list-price float-left mR20px ">
      <div class="value">$575.00</div>
     </div>
  </div>
</div>

由于显而易见的原因,下面的xpath代码不能在多个实例中起作用。

price = driver.find_element_by_xpath('//*[@id="saksBody"]/div[4]/div[1]/div[2]/div[1]/div[6]/div/div/div/div').text

所以,我尝试过这样的代码:

price = driver.find_element_by_class_name('value')

但是,这还不够具体。

有没有办法打印<div class="price-view">中的所有文字?然后我可以使用正则表达式解决其余问题。

此代码似乎没有抓取标记

中标记内的文本
price = driver.find_element_by_class_name('price-view').text

非常具体,我想知道如何输出:

Was$250.00Now$150.00

$575.00

分别为第一和第二个链接。

1 个答案:

答案 0 :(得分:0)

在这两种情况下,定价都在DIV,类price-view,因此我们使用CSS选择器div.price-view来获取外部元素。然后它会查看list-and-sale-price类是否存在。如果确实如此,那么我们有一个清单和销售价格,所以抓住销售价格。无论哪种方式,列表价格都存在,所以我们抓住它。这样你就不必对这些碎片进行正则表达式。

priceView = driver.find_element_by_css_selector("div.price-view")
if (priceView.find_elements_by_css_selector("div.list-and-sale-price"))
    # there is a list and sale price, grab the sale price
    salePrice = priceView.find_element_by_css_selector("div.sale-price > div.value")).text
# in either case, grab the list price
listPrice = priceView.find_element_by_css_selector("div.list-price > div.value")).text