【问题标题】:How to get the price as a number from a website using Selenium and Python如何使用 Selenium 和 Python 从网站获取价格作为数字
【发布时间】:2020-06-16 10:54:16
【问题描述】:

我正在创建一个机器人,它可以自动化我的工作并从特定网站复制特定值。一切正常,但我的代码的最后几行 w.text 产生的结果是文本,我需要一个数字。检查后我需要的每个元素的值如下所示:

<span class="good">€25,217.65</span>

如何以数字而不是文本的形式获取值?我尝试了 w.value 或 w.get_attribute('value) 但它不起作用。 这是我的程序(不包括库和文件的下载)

driver = webdriver.Chrome(driver_path)   
driver.get('https://seabass-admin.igp.cloud/')   
# waiting for login table to load
try:
    element = WebDriverWait(driver,10).until(
    ec.presence_of_element_located((By.XPATH,'//*[@id="email"]'))
    )
except:
    driver.quit()

#entering sensitive info
driver.find_element_by_id("email").send_keys(pwx.em)                                  # login details
driver.find_element_by_id("password").send_keys(pwx.pw)                               # password 
details
driver.find_element_by_xpath('//*[@id="appContainer"]/div/form/button').click()       # click sign in

# waiting for page to load
try:
    element = WebDriverWait(driver,10).until(
    ec.presence_of_element_located((By.XPATH,'//* 
[@id="testing"]/section/section[4]/div/table/tbody/tr[2]/td[3]/span'))
    )
except:
    driver.quit()

# getting info from the page
w = driver.find_element_by_xpath('//* 
[@id="testing"]/section/section[4]/div/table/tbody/tr[2]/td[3]/span')
cell = outcome['import']
cell[withdrawal_cell].value = w.text

【问题讨论】:

  • 所以你得到这个值 - w.text as €25,217.65 ?

标签: python selenium selenium-webdriver floating-point getattribute


【解决方案1】:

您可以为此使用 Python 的一些内置函数:

  1. str.strip() 删除任何前导或尾随 '€' 字符,然后
  2. str.replace() 删除 ',' (将其替换为空字符串 '')

具体来说:

str_w = w.text  # this is the '€25,217.65' string
digits=str_w.strip('€').replace(',','')     # use the functions above to get number-like string
cell[withdrawal_cell].value = float(digits)   # convert to float number

【讨论】:

  • 收到错误消息“WebElement”对象没有属性“strip”
  • 您需要将其应用于字符串类型对象,即w.text(这一行str_w = w.text)而不是w(webelement)。
【解决方案2】:

根据您共享的 HTML:

<span class="good">€25,217.65</span>

文本 €25,217.65 是 innerHTML。

因此,您可以使用以下任一方法提取文本 €25,217.65:

  • w.get_attribute("innerHTML")
  • 文本属性。

现在要获得价值 €25,217.65 作为数字而不是文本,您需要:

  • 使用re.sub() 删除€ 和, 字符:

    import re
    
    string = "€25,217.65"
    my_string = re.sub('[€,]', '', string)
    
  • 最后,要将 string 转换为 float,您需要将字符串作为参数传递给 float(),如下所示:

    my_number = float(my_string)
    

所以整个操作在一行中:

import re

string = "€25,217.65"       
print(float(re.sub('[€,]', '', string)))

实际上,您的代码行可以是以下任何一种:

  • 使用文本属性:

    cell[withdrawal_cell].value = float(re.sub('[€,]', '', w.text))
    
  • 使用get_attribute("innerHTML"):

    cell[withdrawal_cell].value = float(re.sub('[€,]', '', w.get_attribute("innerHTML")))
    

【讨论】:

  • 我可以很容易地将它作为文本获取,但我需要它作为数字 - 这就是重点。因为当它保存我从网上抓取的所有值时,我需要执行数学运算,但此时我需要进入文件,手动将格式更改为文本中的数字 - 只有这样我才能继续。我正在尝试使所有内容自动化,因此我需要将该数字作为数字而不是文本
  • @EllieBiessek 查看更新的答案并告诉我状态。
猜你喜欢
  • 2022-08-18
  • 2019-07-10
  • 2022-01-08
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2016-05-17
相关资源
最近更新 更多