python selenium firefox, специальный символ @ для всплывающей аутентификации

1

Я пытаюсь войти в систему с python Selenium на веб-страницу, требующую учетных данных.
В отличие от примера здесь мое имя пользователя - это адрес электронной почты, поэтому он содержит символ "@" (и я использую Python).

from selenium import webdriver
driver = webdriver.Firefox()
webpage = 'http://somewhere.com/cgi-bin/dirwrap.cgi?template=template&path=news'
username = '[email protected]'
password = 'mypassword'
url = username + ':' + password + '@' + webpage
print(url)
driver.get(url)

выход

[email protected]:mypassword@http://somewhere.com/cgi-bin/dirwrap.cgi?template=template&path=news
Traceback (most recent call last):
File "question.py", line 12, in <module>
  driver.get(url)
File "/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 324, in get
  self.execute(Command.GET, {'url': url})
File "/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 312, in execute
  self.error_handler.check_response(response)
File "/anaconda3/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
  raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidArgumentException: Message: Malformed URL: [email protected]:mypassword@http://somewhere.com/cgi-bin/dirwrap.cgi?template=template&path=news is not a valid URL.

Я считаю, что проблема связана с дополнительным символом "@". Как включить его, не создавая неверный URL?

Теги:
selenium

1 ответ

0
Лучший ответ

у вас нет правильного URL-адреса, он должен быть http://username:password@url, но у вас есть username:password@http://url

попробуй это

webpage = 'somewhere.com/cgi-bin/dirwrap.cgi?template=template&path=news'
username = '[email protected]'
password = 'mypassword'

url = 'http://{}:{}@{}'.format(username, password, webpage)

Выход

http://[email protected]:[email protected]/cgi-bin/dirwrap.cgi?template=template&path=news

но я думаю, что это вызовет проблемы, потому что у вас есть два @ лучше было бы использовать send_keys, например,

webpage = 'http://somewhere.com/cgi-bin/dirwrap.cgi?template=template&path=news'

driver.get(url)

email_input = driver.find_element_by_xpath('email input xpath')
email_inpit.clear()
email_input.send_keys(username)

pwd_input = driver.find_element_by_xpath('password input xpath')
pwd_inpit.clear()
pwd_input.send_keys(password)

# and after this you need to click on 'ok' btn
  • 0
    Правильно отформатированный URL работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню