Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用MechanicalGroup的API未能提交表单-NoneType_Python_Mechanicalsoup - Fatal编程技术网

Python 使用MechanicalGroup的API未能提交表单-NoneType

Python 使用MechanicalGroup的API未能提交表单-NoneType,python,mechanicalsoup,Python,Mechanicalsoup,我正在使用一个python API,它使用MechanicalSoup来完成它的大部分功能,突然之间,它不再工作了。我觉得它正在使用的网站可能已经改变了或者其他什么 以下是API的代码: def trade(self, symbol, orderType, quantity, priceType="Market", price=False, duration=Duration.good_cancel): """ Executes trades on the pla

我正在使用一个python API,它使用MechanicalSoup来完成它的大部分功能,突然之间,它不再工作了。我觉得它正在使用的网站可能已经改变了或者其他什么

以下是API的代码:

def trade(self, symbol, orderType, quantity, priceType="Market", price=False, duration=Duration.good_cancel):
        """
        Executes trades on the platform. See the readme.md file
        for examples on use and inputs. Returns True if the
        trade was successful. Else an exception will be
        raised.

        client.trade("GOOG", Action.buy, 10)
        client.trade("GOOG", Action.buy, 10, "Limit", 500)
        """

        br = self.br
        trade_page = self.fetch('/simulator/trade/tradestock.aspx')
        trade_form = trade_page.soup.select("form#orderForm")[0]

        # input symbol, quantity, etc.
        trade_form.select("input#symbolTextbox")[0]["value"] = symbol
        trade_form.select("input#quantityTextbox")[0]["value"] = str(quantity)

        # input transaction type
        [option.attrs.pop("selected", "") for option in trade_form.select("select#transactionTypeDropDown")[0]("option")]
        trade_form.select("select#transactionTypeDropDown")[0].find("option", {"value": str(orderType.value)})["selected"] = True

        # input price type
        [radio.attrs.pop("checked", "") for radio in trade_form("input", {"name": "Price"})]
        trade_form.find("input", {"name": "Price", "value": priceType})["checked"] = True

        # input duration type
        [option.attrs.pop("selected", "") for option in trade_form.select("select#durationTypeDropDown")[0]("option")]
        trade_form.select("select#durationTypeDropDown")[0].find("option", {"value": str(duration.value)})["selected"] = True

        # if a limit or stop order is made, we have to specify the price
        if price and priceType == "Limit":
            trade_form.select("input#limitPriceTextBox")[0]["value"] = str(price)

        elif price and priceType == "Stop":
            trade_form.select("input#stopPriceTextBox")[0]["value"] = str(price)

        prev_page = br.submit(trade_form, trade_page.url)
        prev_form = prev_page.soup.select("form", {"name": "simTradePreview"})
        br.submit(prev_form, prev_page.url)

        return True
下面是我实现它的代码:

def buy(shares, ticker, client):
    client.trade(ticker,ita.Action.buy, shares)
...
if apred[0] -  arl[-1] > 0 and apred[1] - apred[0] > 0 and tickers[0] not in z:
        buy(ashr ,tickers[0], client) 
以下是错误消息:

Traceback (most recent call last):
  File "/Users/carson/mlTechnicalAnalysis/investopedia.py", line 146, in <module>
    schedule.run_pending()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/schedule/__init__.py", line 493, in run_pending
    default_scheduler.run_pending()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/schedule/__init__.py", line 78, in run_pending
    self._run_job(job)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/schedule/__init__.py", line 131, in _run_job
    ret = job.run()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/schedule/__init__.py", line 411, in run
    ret = self.job_func()
  File "/Users/carson/mlTechnicalAnalysis/investopedia.py", line 56, in main
    buy(ashr ,tickers[0], client)
  File "/Users/carson/mlTechnicalAnalysis/investopedia.py", line 16, in buy
    client.trade(ticker,ita.Action.buy, shares)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/InvestopediaApi/ita.py", line 240, in trade
    prev_form = prev_page.soup.select("form", {"name": "simTradePreview"})
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/bs4/element.py", line 1532, in select
    for candidate in _use_candidate_generator(tag):
TypeError: 'dict' object is not callable
回溯(最近一次呼叫最后一次):
文件“/Users/carson/mlTechnicalAnalysis/investopedia.py”,第146行,在
schedule.run_pending()
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/schedule/_init__.py”,第493行,运行中
默认\u计划程序。运行\u挂起()
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/schedule/_-init___;.py”,第78行,运行中
自我运行作业(作业)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/schedule/_init__.py”,第131行,在运行作业中
ret=job.run()
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/schedule/_init__.py”,第411行,正在运行
ret=self.job_func()
文件“/Users/carson/mlTechnicalAnalysis/investopedia.py”,第56行,主视图
购买(ashr,股票代码[0],客户)
文件“/Users/carson/mlTechnicalAnalysis/investopedia.py”,第16行,购买
客户交易(股票代码、ita.Action.buy、股票)
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/InvestopediaApi/ita.py”,第240行,交易中
prev_form=prev_page.soup.select(“form”,{“name”:“simTradePreview”})
文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/bs4/element.py”,第1532行,选择
对于候选项,请使用候选项生成器(标记):
TypeError:“dict”对象不可调用
我已经把头撞在墙上几个小时了,我觉得你们中的一个需要两秒钟才能弄明白。仅供参考,这是一个API,用于在Investopedia的股票交易模拟器上进行交易


谢谢

简而言之:您向
传递的参数太多了。select()
;必须以字符串形式传递单个CSS选择器

查看堆栈跟踪:

  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/InvestopediaApi/ita.py", line 240, in trade
    prev_form = prev_page.soup.select("form", {"name": "simTradePreview"})
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/bs4/element.py", line 1532, in select
    for candidate in _use_candidate_generator(tag):
TypeError: 'dict' object is not callable
似乎作为第二个参数传递给
.select()
的是一个dict(
{“name”:“simTradePreview”}
)。显然这不是预料中的


从stacktrace中可以看出,所讨论的
是BeautifulSoup 4(
bs4
);其
选择
接受第二个参数。但是有更多的带有默认VLUE的未记录参数,特别是您所忽略的,
\u candidate\u generator

那么解决方案是什么呢?如何解决此问题?请尝试使用类似的
'form[name=“simTradePreview”]
作为
.select()
的单个参数。了解CSS选择器在使用soup时非常重要。