我正在尝试加载一个需要使用Python脚本和Selenium进行身份验证的网页。
options = webdriver.ChromeOptions()
prefs = {'download.default_directory': r"download.default_directory=" + download_folder,
"download.prompt_for_download": False, 'profile.default_content_setting_values.automatic_downloads': 1}
options.add_experimental_option('prefs', prefs)
options.add_argument("--start-maximized")
options.add_argument('--disable-browser-side-navigation')
driver = webdriver.Chrome(chrome_options=options, executable_path=chrome_driver)
driver.get('https://user:pass@somepage.com/32324')
这仍然会收到带有用户名和密码的弹出警报。所以,我想我只会在代码中处理警报,但似乎在警报关闭之前页面不会完成加载,因此脚本卡在 get 函数上。我该如何处理这种情况?
编辑:这不是重复,因为那里接受的答案对我不起作用。
所以这可能是最愚蠢的解决方案,我不能说它对每个人都有效,但是......尝试刷新页面。只:
driver.get("https://website.com")
time.sleep(1)
driver.refresh()
在Chrome中,这清除了身份验证弹出窗口并将我带到登录页面,然后Selenium可以处理该页面。
如果您的意思是 html 基本身份验证,您还可以尝试以下解决方法: (对不起,我只知道Java,但它应该非常相似(
driver.get("http://[USERNAME]:[PASSWORD]@[rest of the Page-URL you want to
enter]");
driver.get("[normal URL of the page you want to enter]");
第二个驱动程序调用只是重新加载页面。我不知道你是否需要它,但对于我的自动化来说,它是需要的。
浪费了几个小时后,事实证明这是chromedriver的已知问题:https://bugs.chromium.org/p/chromedriver/issues/detail?id=1917&q=authentication&colspec=ID%20Status%20Pri%20Owner%20Summary
我改用火狐,它从那里开始工作。
试试这个...
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
prefs.put("profile.password_manager_enabled", false);
options.setExperimentalOption("prefs", prefs);
尝试使用 autoit:
代码类似于::
from selenium import webdriver
import autoit
driver= webdriver.Chrome()
driver.get("http://sitewithpopup.com")
autoit.win_wait_active("",30) # Make sure you give blank since the cursor is at userid
autoit.send("Username{TAB}")
autoit.send("Password{Enter}")
由于自动将在光标所在的任何地方键入,并且默认情况下光标位于userID字段上,因此您可以使用它。