Selenium Webdriver:确定为警报的窗口(HTTP基本访问身份验证),如何登录(Python)

利特文

单击以类似的链接<a href="/loginform.do">,它会打开一个新的弹出窗口,其中包含登录名/密码字段(“确定” /“取消”按钮)。然后网络驱动程序出于某种原因将其确定为警报而不是窗口...

如果尝试 for handle in browser.window_handles: print(handle)

它是返回异常:UnexpectedAlertPresentException:警报文本:消息:存在模态对话框

如果尝试 alert=browser.switch_to_alert() alert.send_keys('userlogin')

它正在工作(将用户登录名插入第一个字段)。然后,如果尝试通过TAB键将光标移动到下一个字段(密码)

alert.send_keys(Keys.TAB)

它是将第一个字段的文本替换为项目符号,而不是跳至下一个字段...

不仅TAB甚至ENTER都以相同的方式工作

alert.send_keys(Keys.ENTER)

它粘贴相同的项目符号,而不是将请求发送到服务器

alert.accept()

什么都不做(不向服务器发送请求)

在这里可以做什么?

  • 这是一个警报,因此find_element_by _...方法不适用。

  • send_keys的TAB无效(无制表符)。

  • 是按坐标单击的唯一解决方案(使用pyautogui模块作为选项)吗?

  • 还是可以使用webdriver做更多的事情?

使用IE(IEDriverServer)的BTW

还有一些寻找紧密的问题

因此,以.htaccess密码保护的登录形式为例(advancedhtml.co.uk/password.html)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser=webdriver.Ie('c:\\...\\IEDriverServer.exe')

page='http://www.advancedhtml.co.uk/password/'
browser.get(page)
alert=browser.switch_to_alert()
#alert=browser.switch_to.alert() # this should work, but it doesn't: TypeError: 'Alert' object is not callable
alert.send_keys('user')
alert.send_keys(Keys.TAB) # no tabbing, bullet symbol instead...
#alert.send_keys('password')
利特文

因此,这种登录页面是HTTP基本访问身份验证。看起来处理这种身份验证的最佳方法是发送发布请求(请求包)

需要将浏览器会话从Selenium传递到请求(29563335

代码可能如下所示:

from selenium import webdriver
import requests

startURL='http://some_url'
browser=webdriver.Ie('c:\\path\\IEDriverServer.exe')
browser.get(startURL)

# an example of finding login link and get the url
loginLink=browser.find_element_by_xpath("//*[contains(text(), 'Log In')]")
loginURL=loginLink.get_attribute('href')

# load cookies from Selenium to Requests (so we could authenticate in current session)
cookies=browser.get_cookies()
s=requests.Session()
for cookie in cookies:
 s.cookies.set(cookie['name'], cookie['value'])

# and send the post request
auth=('login', 'password')
r=s.post(url=loginURL, auth=auth)
browser.refresh() # refresh page to see the result

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Selenium WebDriver测试登录验证/身份验证

如何使用 Selenium Webdriver 和 C# 处理 Chrome 应用程序身份验证警报

使用Python 2.7 + Selenium Webdriver处理“需要身份验证”警报框

如何在Selenium WebDriver中对FirefoxDriver,ChromeDriver和IEdriver执行基本身份验证?

如何使用Selenium C#管理基本身份验证登录?

Selenium Grid 中的 HTTP 基本身份验证

如何使用python(Selenium)处理Selenium中的Windows身份验证弹出窗口(加Java)

Selenium 使用 Chrome 浏览器 - HTTP 基本身份验证期间超时 [Python]

为Selenium创建HTTP基本身份验证Chrome扩展(提供MWE)

使用Selenium Webdriver处理Windows身份验证

使用Selenium WebDriver处理Windows NTLM身份验证

通过Selenium关闭代理身份验证弹出窗口

在警报Selenium Webdriver上单击“确定”

python selenium firefox,特殊字符@用于身份验证弹出窗口

Selenium Webdriver单击警报

如何使用Selenium WebDriver处理“使用Google登录”弹出窗口

使用Python使用Selenium设置chromedriver代理身份验证

Python Selenium chromedriver对luminati代理进行身份验证吗?

Selenium WebDriver 登录 MondoZoo

如何使用Python + Selenium在警报中单击“确定”按钮

如何使用Selenium + Chrome WebDriver + Python忽略警报?

如何在Selenium chromedriver python中设置带身份验证的代理?

如何使用Python / Selenium设置代理身份验证用户名:密码

为什么我的Selenium WebDriver身份验证不起作用(Django 1.9)

使用 Safari Capybara Selenium 进行基本浏览器身份验证

如何使用Selenium Webdriver?

StaleElementReferenceException Selenium WebDriver Python

Selenium Webdriver Python storeTextPresent

如何启用从Selenium WebDriver登录的ChromeDriver