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

How to use Pandas DF values as string in Python so i can sendkeys in Selenium with the exact valeu extracted from Pandas DF?

所以我有一个包含股票代码和价格的 csv 文件。我创建了一个 webscraper 来与我的 'Home-Broker' 交互,因为我还不知道如何处理 websockets。

我想做的是使用 Pandas 从 csv 文件中获取符号和价格,并使用 selenium 将每个特定表格上的符号和价格用于 .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_keys('APPL') & .send_keys('319.61') 替换为某种 .send_keys df.head (0) 并循环直到我发送 df.head(3)

的买单

有什么办法吗?

感谢您的耐心等待,并提前致谢

你可以这样做

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)

您可以这样遍历您的 DataFrame:

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()