使用Selenium进行Python HTTP基本认证时,如果用户名和密码包含特殊字符

3
我在使用默认的Selenium身份验证时,遇到了一个非常具体的问题,使用以下结构:username:password@siteurl.com
问题如下:如果我使用像这样的密码"''asd'asd';123asd'(带有特殊符号),traceback会提示URL不正确。但是,如果密码只包含数字和字母,则一切正常。 以下是一个可以正常工作的代码示例,但是对于我的示例,我需要使用许多特殊符号来填写密码,而我没有权限更改它。
import unittest
from selenium import webdriver


class LoggedTest(unittest.TestCase):
    @classmethod
    def setUp(inst):
        # create a new Chrome session """
        inst.driver = webdriver.Chrome()
        inst.driver.implicitly_wait(30)
        inst.driver.maximize_window()

        # navigate to the application home page """
        inst.driver.get("http://admin:admin@theinternet.herokuapp.com/basic_auth")

尝试使用driver.get('http://admin:%22%27%27asd%27asd%27%3B123asd%27@theinternet.herokuapp.com/basic_auth')。您可以使用URL编码器对特殊字符进行编码/解码。 - Andersson
这个案例也可以工作,谢谢。 所以主要问题是UTF编码,现在我知道如何解决了。 非常感谢。 - Ivan Pelykh
1个回答

6

对于基本身份验证,如果密码包含符号,例如"''asd'asd';123asd',则需要将字符串 翻译UTF。例如:

username = "%21%40user" #stands for !@user
password = "%0D%0Apass" #stands for ^&pass
webpage = "something.url.com"

现在你可以使用:
url = 'http://{}:{}@{}'.format(username, password, webpage)
driver.get(url)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接