我有一个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脚本中获取此值并使用它。
答案 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()