如何在锁定屏幕的同时使用Selenium从带有证书的Web下载

2024-06-18 03:51:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用selenium从需要证书的网页下载文件。我的计算机上有多个证书,因此每次出现弹出窗口时,我都需要选择正确的证书来访问该网页的内容。目前,当计算机未锁定时,我可以运行selenium并自动执行所有这些任务,而不会出现问题。但在运行代码脚本并锁定屏幕后,会遇到以下错误:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\lmsun\anaconda3\lib\threading.py", line 926, in _bootstrap_inner
    self.run()
  File "C:\Users\lmsun\anaconda3\lib\threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "C:/Users/lmsun/Desktop/Five Dimensions Energy/Liming/ERCOT_Download/ERCOT_Download.py", line 52, in threaded_function2
    pyautogui.press('down')
  File "C:\Users\lmsun\anaconda3\lib\site-packages\pyautogui\__init__.py", line 1174, in press
    failSafeCheck()
  File "C:\Users\lmsun\anaconda3\lib\site-packages\pyautogui\__init__.py", line 1257, in failSafeCheck
    raise FailSafeException('PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.')
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.

我可以通过冻结鼠标来消除这个错误。但在我锁定屏幕后,selenium似乎无法再处理证书弹出窗口。有人知道有没有解决办法吗?多谢各位

```
def threaded_function(url, browser):
    # Calls the website
    browser.get(url)
    return


def threaded_function2():
    global cert_num
    # give enough time so that the pop will appear before the press
    time.sleep(10)  # this needs to be hardcoded, if pass in as a parameter, thread error occurs
    # choose the right certification
    for i in range(cert_num):
        pyautogui.press('down')
    time.sleep(2)
    pyautogui.press('enter')
    return

while ind2 < 5:
    try:
        if ind2 != 0:
            print(f"Retrying open {folder_name_2}, {ind2 + 1}")
        browser = webdriver.Chrome(driver_directory)
        # Check version of msedgedriver.exe and Edge
        str1 = browser.capabilities['browserVersion']
        str2 = browser.capabilities['chrome']['chromedriverVersion'].split(' ')[0]
        if str1[0:2] != str2[0:2]:
            print("please download correct msedgedriver version")
            return
        print("Selenium operating starts...")

        cert_num = int(input_df[cert_end + '\''].values.tolist()[0]) - 1
        cert_dir = input_df[cert_end + '\''].values.tolist()[1]
        thread2 = threading.Thread(target=threaded_function2)
        thread2.start()

        thread = threading.Thread(target=threaded_function(url, browser))
        thread.start()

        thread.join()
        thread2.join()
        if ind2 != 0:
            print(f'The issue is solved, reopen window for {folder_name_2} successfully.')
        ind2 = 5
```

Tags: thetoinpybrowsercertlinethread