我在这里遇到了一个我从未想过的问题,我已经尝试了所有可以在网上找到的建议来解决它,但它仍然存在。
我有一个 selenium(python0 脚本,可以打开我的网页,访问登录页面并输入用户名和密码以访问平台。
我的本地脚本如下所示:
PATH = "path to web driver chrome"
driver = webdriver.Chrome(PATH)
driver.maximize_window()
random_number = str(random.randint(1,500))
test = 'Test' + random_number
f = open('./config.json',)
data = json.load(f)
username = data['username']
password = data['password']
print(data)
# Website link to target. In our case we want cc outhink login page
driver.get("web-page-url")
wait = WebDriverWait(driver, 30)
wait.until(EC.element_to_be_clickable((By.XPATH, "//*[local-name()='svg' and contains(@class, 'Card__OTSigninButton-sc')]"))).click()
time.sleep(20)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormUsername"))).send_keys(username)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input#signInFormPassword"))).send_keys(password)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='visible-lg'] input[name='signInSubmitButton']"))).click()
我有一个 config.json
,凭据如下
{
"usernameot": "",
"passwordot": ""
}
如果我在 config.json
中输入凭据并运行我的脚本,一切都会顺利运行,没有任何问题。现在我想将此工作流集成到一个 azure 管道中,以便能够一键自动执行此脚本,而不是每次都手动运行。
作为最佳实践的一部分,我决定使用 config.json 变量并在运行时用凭据覆盖其值,这样我就不必在 GitHub 上存储敏感数据。
这是我的管道:
trigger: none
variables:
vmImageName: 'windows-latest'
stages:
- stage:
jobs:
- job: Configuration
steps:
- task: PowerShell@2
displayName: "Set Configuration"
inputs:
targetType: "inline"
script: |
#read config
$config = Get-Content (Get-Item .\config.json) -Raw -Encoding UTF8 | ConvertFrom-Json
#set the credentials
$config.usernameot = $(username)
$config.passwordot = $(password)
#update the file
$config | ConvertTo-Json | Set-Content .\config.json
- task: PowerShell@2
displayName: "Check Configurations"
inputs:
targetType: "inline"
script: |
#debug
dir
cat config.json
- task: UsePythonVersion@0
inputs:
versionSpec: '3.8'
addToPath: true
- script: |
python -m pip install --upgrade pip
pip install selenium
printenv
- task: Pythonscript@0
inputs:
scriptSource: 'filePath'
scriptPath: './test1.py'
- job: Mailinator
dependsOn: Configuration
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
addToPath: true
- script: |
python -m pip install --upgrade pip
pip install selenium
- task: Pythonscript@0
inputs:
scriptSource: 'filePath'
scriptPath: './test2.py'
在管道和 python 脚本中,我都有一些调试 print
来检查我的变量的状态。
这里发生了什么。
在 azure devOps 中,我设置了变量。我运行管道。在第一个测试中,我可以在输出中看到变量已成功填充。
说到python脚本,输出很奇怪。因此:
它打开 url 的网络驱动程序(所以我认为这不是浏览器配置错误),但它在用户名 input
上超时。
在我的 python 脚本中,我有一个 print(data)
并且我能够看到正确的凭据,但由于某种原因 python 无法检索它并将其用作用户名。
这是否曾发生在任何人身上,也许可以帮助我理解为什么会发生此错误?
我出于沮丧而进行的另一个测试是将用户名直接传递给脚本。仍然出现同样的错误,我在想可能浏览器没有找到用户名字段。