【问题标题】:Watir: How do i get inner_html of multiple span, with same class nameWatir:我如何获得具有相同类名的多个跨度的 inner_html
【发布时间】:2017-02-06 20:28:21
【问题描述】:

我正在使用这段代码,来获取 span 类的inner_html

weather = browser.span(:class => "_Xbe kno-fv").inner_html
puts weather

但是,多个inner_html 在页面中存在同一个类。如何一次检索所有这些?

我正在尝试从page获取有关天气的信息

weather = browser.span(:class => "_Xbe kno-fv").text
puts weather

上面的代码打印文本但不一致。我相信,因为同一个类中存在多个元素,或者信息是动态的,因此?我不确定。有没有办法得到这个? 4

第一次运行的结果

Examples:
  | Search    |
  | Bangalore |  741 km²

第二轮结果

Examples:
  | Search    |
  | Bangalore |  17°C, Wind E at 3 km/h, 69% Humidity

【问题讨论】:

  • 尝试 browser.spans() 而不是 browser.span()
  • @Raphael 对不起,我忘了提,我试过browser.spans。我在结果中打印了这个#<Watir::SpanCollection:0x2ff6118>
  • @Raphael 啊哈!我发现这不起作用,因为我没有给出任何迭代器。这工作weather = browser.spans(:class => "").each do |span| puts span.text 谢谢!
  • @MrityunjeyanS,我有一个场景,所有的 都没有任何类,随机有 id 和公共 xpath。如何使用此 spans 方法和 xpath 来检索多个 span 元素。

标签: html ruby watir watir-webdriver


【解决方案1】:

您所定位的元素包含在具有唯一数据属性的<div> 中。我建议使用这种方法:

require 'watir'    
b = Watir::Browser.new :chrome
b.goto "https://www.google.com/?gfe_rd=cr&ei=w7-YWN75OsyAoAPK_oDYBQ#q=bangalore" 

puts b.div(:data_attrid => "kc:/location/citytown:current weather").text
#=> Weather: 59°F (15°C), Wind S at 2 mph (3 km/h), 83% Humidity

供参考——@JustinKo demonstrates--watir 可以将数据属性用作定位器,并进行一些小的调整。

旁注:针对 Google 运行自动搜索可能会违反他们的服务条款,您可能会发现自己被屏蔽了。您应该调查是否可以使用他们的众多 API 之一来收集这些数据。

【讨论】:

  • 谢谢@orde。这很好用……关于旁注,我不知道,但是为什么呢?我以为只有抓取网站需要权限?但无论如何,谷歌应该有一个基准,宣布我的搜索是自动化的?比如每秒 1000 次搜索?
  • 我不确定他们在允许自动搜索方面有多严格。只是警告他们可能不喜欢它;)
  • 知道了!谢谢你告诉我。
【解决方案2】:

我不确定这是否是您的问题的原因,但一个重要的问题是当一个类定位器只能接受一个时,您使用了多个类值:

不要这样做:browser.span(:class => "_Xbe kno-fv")

这样做:browser.span(css: "._Xbe.kno-fv")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多