单击以类似的链接<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
还有一些寻找紧密的问题
31152912是一个封闭的问题,但答案是关于find_element_by_name的(“ Alert”对象没有此类属性)
31152912,29516740,27322871回答了有关使用' HTTP://用户名:密码@ ',可惜的是它不工作
因此,以.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] 删除。
我来说两句