当输入字段上的“name”值类似于data[user][mail],而不是使用selenium时,如何从Python登录网站?

2024-03-28 19:42:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用这个密码登录

res = opener.open(login_url, data)
res.close()

但有些情况下,我无法登录。 这些无法登录的网站在输入字段模式上有相同的“name”值,如下所示

<input name="data[User][mail]" type="text" size="40" value="testuser@google.com" id="UserMail">

*如果名称的值类似于简单的“username”,我可以轻松登录

有人知道如何登录这些类型的网站吗

谢谢


Tags: nameurl密码closeinputdata网站模式
3条回答

注意到两件事: 1)通过做

while(verify = true)

实际上,您正在将值true分配给verifyName。你需要使用

while(verifyName)

2.)在哪里重新分配verifyName的值? 您应该在while块中进行验证和重新分配

你也应该考虑更干净的替代方案,但这可以再等一天。

你永远不会跳出while循环,因为变量verifyName在循环内永远不会更新。这意味着你要么永远不会执行循环,因为用户插入了你想要的输入,要么你最终会得到一个无限循环

您还需要在循环中进行输入验证,并小心布尔验证。 比如:

while (verifyName) {
    System.out.println("Please input a valid medium (air, water, or steel): ");
    userMedium = user_input.nextLine( );
    mediumConvert = userMedium.toLowerCase();
    if (mediumConvert.equals("cheese") || mediumConvert.equals("water") || mediumConvert.equals("burger")){
        verifyName = false;
    } else {
        verifyName = true;
    }
}
while (verifyName = true)
                  ↑

你是分配而不是比较。赋值表达式返回赋值,因此循环等价于:

while (true)

您应该将其更改为:

while (verifyName)

基本上,你应该写while (verifyName == true),但这是多余的,因为这就像问“verifyName是真的吗?”。它还可以防止潜在的错误,比如只插入一个=而不是两个

相关问题 更多 >