如何在Selenium WebDriver URL中传递参数?Python传参失败求助
解决Selenium传递node_name参数到window.open的问题
我来帮你搞定这个问题~你之前的写法出错,是因为把Python的变量直接硬写到了JavaScript字符串里,JS根本不认识sys.argv[1]这个Python变量,自然没法正确解析。
下面给你两种靠谱的解决办法:
方法1:用Python的f-string拼接字符串
先把命令行参数存成变量,再用f-string把变量值嵌入到JS代码里,这样Python会先把变量替换成实际值,再传给execute_script执行:
import sys from selenium import webdriver # 初始化Chrome驱动(可根据实际配置调整,比如用ChromeDriverManager自动管理驱动) driver = webdriver.Chrome() # 确保运行时传入了命令行参数 if len(sys.argv) < 2: print("请在运行时传入node_name参数,比如:python your_script.py abc") driver.quit() sys.exit(1) node_name = sys.argv[1] # 用f-string把node_name嵌入到目标URL中 driver.execute_script(f"window.open('https://test.test.com/comp/node_name:{node_name}');") # 后续操作... driver.quit()
方法2:通过execute_script的参数传递(更安全)
这种方法不需要拼接字符串,而是把Python变量作为参数传给execute_script,在JS里用arguments[0]获取这个值,能避免潜在的字符串注入问题,更推荐使用:
import sys from selenium import webdriver driver = webdriver.Chrome() if len(sys.argv) < 2: print("请传入node_name参数") driver.quit() sys.exit(1) node_name = sys.argv[1] # 把node_name作为第二个参数传给execute_script,JS里用arguments[0]引用它 driver.execute_script("window.open('https://test.test.com/comp/node_name:' + arguments[0]);", node_name) # 后续操作... driver.quit()
两种方法都能实现你的需求,选哪种看你偏好~测试的时候记得用命令行传参数,比如python your_script.py abc,这样node_name就会被设为abc啦。
内容的提问来源于stack exchange,提问作者gosatriani
相关产品推荐
相关产品推荐

