将变量从Powershell传递给Python

时间:2018-12-25 05:52:55

标签: python powershell

我有一个Powershell脚本,该脚本正在为我运行一些自动化功能,为此,我用python编写了一个脚本,该脚本利用selenium打开网页,输入数据并退出。我需要为另一个站点做同样的事情,但是它有一个登录页面。从我的Powershell脚本中,我提示用户输入Name和Pwd,并将其保存到变量中。我正在努力的部分是将其输入传递给python send_keys函数。这有可能吗?

我的powershell代码是$usernme = Read-Host -Prompt 'Input Username'

然后在python脚本中

user = browser.find_element_by_xpath("""/elementname""")
user.send_keys('$usernme')

仅将$ usernme发送到我要写入的字段,而不发送$ usernme的值。当我从powershell调用python脚本时,是否有可能从powershell脚本中获取此值并使用它。

2 个答案:

答案 0 :(得分:3)

您可以在powershell脚本中运行python脚本,并使用sys.argv[1]提取命令参数。您可以查看sys.argv了解更多详细信息。

test.ps1

$username = Read-Host -Prompt 'Input Username'
python script.py $username

script.py

import sys
print("Your Username:", sys.argv[1])

用法:

PS> .\test.ps1
Input Username: myusername
Your Username: myusername

具体针对您的代码,您可以将user.send_keys('$usernme')更改为user.send_keys(sys.argv[1])

答案 1 :(得分:1)

您也可以尝试使用C#驱动程序直接从powershell运行硒自动化。提取WebDriver.dll(来自Selenium.WebDriver.3.14.0.nupkg),并将其与geckodriver.exe(如果使用firefox)一起与PS脚本一起放入文件夹中。下面是一个示例脚本,您可以将其用作起点:

Add-Type -Path ".\WebDriver.dll"
# put geckodriver.exe in the same folder

$driver = [OpenQA.Selenium.Firefox.FirefoxDriver]::new()

$driver.manage().timeouts().ImplicitWait = [timespan]::FromSeconds(5)

$driver.Navigate().GoToUrl("someurl")

$driver.FindElementByCssSelector(".some-button").Click()  

$driver.quit()