如何向Python Selenium WebDriver包函数传递变量?动态配置端口号
解决动态传入端口号给WebDriver的问题
我来帮你搞定这个问题!你当前的写法错误在于把构造函数需要的关键字参数拼成了一个字符串直接传入,而webdriver.remote.webdriver.WebDriver需要的是分开的关键字参数,不是单个字符串参数。
错误原因分析
你之前的代码把command_executor和desired_capabilities拼成了一个字符串变量command,然后把这个字符串作为第一个参数传给WebDriver。但WebDriver的第一个参数是command_executor,它期望的是一个合法的远程驱动URL,而不是包含逗号和Python代码片段的字符串,这就导致了报错。
正确的解决方案
要动态传入端口号,你只需要把端口号作为变量,动态构造command_executor的URL,然后把参数分开以关键字形式传入即可:
# 动态设置端口号,这里可以替换成你需要的任意端口 port = 4444 # 构造远程驱动的URL command_executor_url = f'http://127.0.0.1:{port}/wd/hub' # 正确初始化WebDriver driver = webdriver.remote.webdriver.WebDriver( command_executor=command_executor_url, desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT )
如果你的Python版本不支持f-string(Python 3.6以下),可以用字符串格式化的老写法:
command_executor_url = 'http://127.0.0.1:{}/wd/hub'.format(port)
额外扩展:动态调整Capabilities
如果你需要动态修改desired_capabilities的配置,也可以先复制默认配置再修改:
port = 4444 command_executor_url = f'http://127.0.0.1:{port}/wd/hub' # 复制默认的HTMLUNIT配置并修改 custom_caps = webdriver.DesiredCapabilities.HTMLUNIT.copy() custom_caps['javascriptEnabled'] = True # 按需启用JavaScript driver = webdriver.remote.webdriver.WebDriver( command_executor=command_executor_url, desired_capabilities=custom_caps )
这样就能完美实现动态传入端口号的需求啦!
内容的提问来源于stack exchange,提问作者Vidur Oberoi
相关产品推荐
相关产品推荐

