使用Splinter的browser.fill()触发TypeError:fill()仅接受2个位置参数却传入3个的问题解决咨询
解决Splinter fill()方法参数错误及含点号输入框填充问题
你遇到的TypeError其实是个简单的用法问题,跟输入框名称里的点号没关系——咱们先把这个误区澄清,再看怎么修正代码。
错误原因:fill()方法的参数使用错误
Splinter的fill()方法只需要接收要填充的文本内容这一个参数,你不需要把元素的name属性值再传一遍。你写的这行代码:
browser.find_by_name('searchArgs.leaseNumberArg').fill('searchArgs.leaseNumberArg', '160895')
多传了一个'searchArgs.leaseNumberArg'参数,这才导致了“需要2个参数但传了3个”的错误(这里的3个参数是:元素对象本身、你额外传的name值、目标填充文本)。
修正后的正确代码
不管输入框的name属性里有没有点号,找到元素后直接调用fill()传文本值就可以了:
from splinter import Browser from bs4 import BeautifulSoup as bs from webdriver_manager.chrome import ChromeDriverManager from selenium import webdriver executable_path = {'executable_path':ChromeDriverManager().install()} browser = Browser('chrome', **executable_path, headless = False) browser.visit('http://webapps2.rrc.state.tx.us/EWA/wellboreQueryAction.do') # 修正后的fill调用:只传要填充的文本 browser.find_by_name('searchArgs.leaseNumberArg').fill('160895')
关于名称含点号的补充说明
你担心的name属性里的点号其实不会影响find_by_name()的工作——Splinter会直接把整个字符串作为name属性的匹配值,不会把点号当成数据结构的分隔符。之前你用类似“成功填充其他输入框”的语法,可能是混淆了其他方法(比如Selenium原生的send_keys()?或者记错了Splinter的用法),但Splinter的fill()确实只需要传入文本值。
内容的提问来源于stack exchange,提问作者Charlie Willmore
相关产品推荐
相关产品推荐

