【发布时间】:2020-09-04 06:35:46
【问题描述】:
我目前正在自动化日常流程之一,并且我已经到了出现 chrome 弹出窗口的地步:
我尝试过:
alert = browser.switch_to.alert
alert.dismiss()
堆栈跟踪:
C:\...>python "C:\\...\\script.py" username pwd code
DevTools listening on ws://127.0.0.1:61324/devtools/browser/464b40f5-dc5b-4fec-be25-35fdadb765e5
[14564:15520:0904/092015.725:ERROR:device_event_log_impl.cc(208)] [09:20:15.725] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed.
Traceback (most recent call last):
File "C:\...\script.py", line 53, in <module>
alert = browser.switch_to.alert
File "C:\...\Local\Programs\Python\Python38-32\lib\site-packages\selenium-3.141.0-py3.8.egg\selenium\webdriver\remote\switch_to.py", line 55, in alert
alert.text
File "C:\...\Local\Programs\Python\Python38-32\lib\site-packages\selenium-3.141.0-py3.8.egg\selenium\webdriver\common\alert.py", line 67, in text
return self.driver.execute(Command.W3C_GET_ALERT_TEXT)["value"]
File "C:\...\Local\Programs\Python\Python38-32\lib\site-packages\selenium-3.141.0-py3.8.egg\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\...\Local\Programs\Python\Python38-32\lib\site-packages\selenium-3.141.0-py3.8.egg\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoAlertPresentException: Message: no such alert
(Session info: chrome=85.0.4183.83)
我尝试过使用time.sleep(2),但没有帮助。
还有其他方法可以检测到这个窗口吗?或者在这种情况下,我们可以传递 ChromeOptions 允许打开启动器,从而阻止此窗口。
感谢任何帮助。
我的代码(我是初学者):
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support import expected_conditions as EC
import time
import sys
url = "link"
argv = sys.argv[1:]
if argv and len(argv) == 3:
browser = webdriver.Chrome(executable_path="...\\chromedriver.exe")
browser.get(url)
time.sleep(2)
if browser.title == "the_title":
# Login
time.sleep(2)
username = browser.find_element_by_name("field1")
password = browser.find_element_by_name("field2")
security_code = browser.find_element_by_name("field3")
username.send_keys(sys.argv[1])
password.send_keys(sys.argv[2])
security_code.send_keys(sys.argv[3])
submit = browser.find_element_by_id("submit")
submit.click()
# Detect
time.sleep(5)
detect = browser.find_element_by_id("detect_button")
detect.click()
time.sleep(2)
# stuck at this point
alert = browser.switch_to.alert
alert.dismiss()
#WebDriverWait(browser, 5).until(lambda d: browser.switch_to_window(str(d.window_handles)))
# steps after
...
else:
print("Failed to load the page")
else:
print("Invalid/Incorrect arguments passed. Provided arguments: " + str(argv))
browser.quit()
【问题讨论】:
-
在没有切换到警报的情况下运行代码时遇到了什么错误?如果您收到除 UnhandledAlert 之外的任何错误,则它不是警报。
-
@rahulrai 我没有收到任何错误
-
那么它就不是警报窗口了。现在检查此窗口并在元素选项卡中搜索 //iframe。看看有没有匹配的。
标签: python selenium selenium-webdriver selenium-chromedriver