【问题标题】:How to get value of spesific element in list with selenium?如何使用硒获取列表中特定元素的值?
【发布时间】:2021-08-03 11:17:09
【问题描述】:

我有一张这样的桌子。我想获得特定课程的价值。例如,我只想要“模型”和“年份”类的值。

<table id="list_tbody">
  <tr>
    <th class="model">Ford</th>
    <th class="year">2000</th>
    <th class="colour">red</th>
  </tr>
   <tr>
    <th class="model">Toyota</th>
    <th class="year">2020</th>
    <th class="colour">blue</th>
  </tr>
    <tr>
    <th class="model">Audi</th>
    <th class="year">2018</th>
    <th class="colour">black</th>
  </tr>
  .
  .
  .
  </table>

获取我使用的所有 tr;

cars=browser.find_elements_by_xpath('//table[@id="list_tbody"]/tr')

所以我所有的 tr 元素都在我的“汽车”列表中。为了得到它们中的每一个,我使用 for 循环

for car in cars: ...

我使用类似的东西,但它不起作用。

for car in cars:
  carModel= car.find_element_by_xpath('//th[@class="model"]').text
  carYear= car.find_element_by_xpath('//th[@class="year"]').text
  print(f"Model : {carModel}, Year : {carYear}")

我想看看:

Model : Ford  - Year : 2020
Model : Toyota - Year : 2010
           .              .
           .              .
           .              .

但它总是只返回列表的第一项。那么我怎样才能在元素列表中获得元素的特定部分?在使用 selenium 获取元素列表后,我还尝试使用 beautifulsoup 获得价值。但是这次我打字的时候

...
Carmodel=car.find("th" class_="model").text

它说“'WebElement' 对象没有属性 'find'”

【问题讨论】:

    标签: python selenium web-scraping beautifulsoup


    【解决方案1】:

    您已接近正确的解决方案,只是在xpaths 中缺少.
    所以试试这个:

    for car in cars:
      carModel= car.find_element_by_xpath('.//th[@class="model"]').text
      carYear= car.find_element_by_xpath('.//th[@class="year"]').text
      print(f"Model : {carModel}, Year : {carYear}")
    

    如果没有.,您的xpath 搜索与整个页面相关,而不是在该元素car 内。使用 Selenium 搜索“从这里”.

    这就是 xpath 的语法来表示“这里”。就像 // 说 'anywhere' 和 @ 是为了 'attribute' . 说 'from here' 来构建相对于给定节点的相对表达式。

    【讨论】:

    • 请打开一个新的、单独的问题,否则版主将关闭它,因为这里的每个问题都应该提出 1 个特定问题。我会尽力帮助你,但我会在最近的时间开会,所以我不能保证我能做到。此外,如果某个答案解决了您的问题,那么接受该答案是一种很好的方式。这意味着问题得到了答案。这也会给你 2 分,给回答的人 15 分。
    【解决方案2】:

    您可以存储模型名称和年份的所有元素。查看以下代码:

    代码:

    model_name_list = driver.find_elements(By.CSS_SELECTOR, "th.model")
    for model_name in model_name_list:
       print(model_name.text)
    

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多