如何在Python中使用Pandas DF值作为字符串,以便我可以使用从Pandas DF中提取的精确valeu在Selenium中发送键?

2024-04-25 00:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个带有股票符号和价格的csv文件。我创建了一个webscraper来与我的“家庭经纪人”互动,因为我还不知道如何处理WebSocket

我想做的是,使用Pandas从csv文件中获取符号和价格,并使用selenium to.sendkeys在每个特定表单上显示符号和价格

下面是我的csv中df.head(3)的输出示例

      Symbol   Price
    0  APPL    319.61
    1  GOOG    1,508.79
    2  AMZN    2,150.80

这是我用来在我的家庭经纪人上发送密钥的输入,我正在手动更改每个股票的代码。

driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').click() driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys('APPL') driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys(Keys.ENTER) time.sleep(1) driver.find_element_by_xpath('//*[@id="txtAssElet_ORDERS1"]').send_keys('319.61') time.sleep(1) driver.find_element_by_xpath('//*[@id="DV_barraCompraVende_BOOK1"]/table[3]/tbody/tr/td[3]').click() time.sleep(10)

我需要替换.send_键('APPL')&。发送密钥('319.61')到某种类型的。发送密钥到df.head(0)并循环最后,我发送df.head(3)的购买订单

有没有办法做到这一点

我感谢你的耐心,并提前向你表示感谢


Tags: csvsendiddfbydriver密钥符号
3条回答

您可以循环使用数据帧,如下所示:

import pandas as pd

df = pd.DataFrame(columns=["Symbol","Price"], data=[["APPL",319.61],["GOOG",1508.79],["AMZN",2150.80]])

for index, row in df.iterrows():
    print(index)
    print(row['Symbol'])
    print(row['Price'])

有更快的方法,但由于您已经被selenium操作所束缚,所以这并不重要

因此,在您的情况下,请使用:

for index, row in df.iterrows():
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').click()
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys(row['Symbol'])
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys(Keys.ENTER)
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="txtAssElet_ORDERS1"]').send_keys(row['Price'])
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="DV_barraCompraVende_BOOK1"]/table[3]/tbody/tr/td[3]').click()
    time.sleep(10)

如果可能的话,我也不会使用SendKeys。试着看看是否可以直接设置该值

如果你只需要抓住股价,你可以这样做

import datetime
import pandas as pd
import numpy as np
import pylab as pl
import datetime
from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from matplotlib.collections import LineCollection
from pandas_datareader import data as wb
from sklearn import cluster, covariance, manifold


start = '2019-02-01'
end = '2020-02-01'

tickers = ['MMM',
'ABT',
'ABBV',
'ABMD',
'ACN',
'ATVI']

thelen = len(tickers)

price_data = []
for ticker in tickers:
    prices = wb.DataReader(ticker, start = start, end = end, data_source='yahoo')[['Open','Adj Close']]
    price_data.append(prices.assign(ticker=ticker)[['ticker', 'Open', 'Adj Close']])

#names = np.reshape(price_data, (len(price_data), 1))

names = pd.concat(price_data)
names.reset_index()


################################
### OR...for a different layout...

thelen = len(tickers)

price_data = []
for ticker in tickers:
    prices = wb.DataReader(ticker, start = start, end = end, data_source='yahoo')[['Adj Close']]
    price_data.append(prices.assign(ticker=ticker)[['ticker', 'Adj Close']])

df = pd.concat(price_data)
df.dtypes
df.head()
df.shape

pd.set_option('display.max_columns', 500)

df = df.reset_index()
df = df.set_index('Date')
table = df.pivot(columns='ticker')
# By specifying col[1] in below list comprehension
# You can select the stock names under multi-level column
table.columns = [col[1] for col in table.columns]
table.head()

你可以这样做

Symbols = df['Symbol'].tolist()
Prices = df['Price'].tolist()
for Symbol,Price in zip (Symbols,Prices):
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').click()
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys(Symbol)
    driver.find_element_by_xpath('//*[@id="txtAtivo_BOOK1"]').send_keys(Keys.ENTER)
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="txtAssElet_ORDERS1"]').send_keys(Price)
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="DV_barraCompraVende_BOOK1"]/table[3]/tbody/tr/td[3]').click()
    time.sleep(10)

相关问题 更多 >