PermissionError: [Errno 13] Permission denied geckodriver.exe

PermissionError: [Errno 13] Permission denied geckodriver.exe

我正在使用 InstaPy 为 Instagram 编写一个机器人。我需要很多帐户,所以我使用线程,但出现错误:

Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Program Files\Python\lib\threading.py", line 973, in _bootstrap_inner
self.run()
File "C:\Program Files\Python\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "c:\Users\User\Desktop\inst\inst.py", line 99, in follow_by_list
user_session = InstaPy(username=user.name, 
File "C:\Users\User\AppData\Roaming\Python\Python39\site-packages\instapy\instapy.py", line 
327, in __init__
self.browser, err_msg = set_selenium_local_session(
File "C:\Users\User\AppData\Roaming\Python\Python39\site-packages\instapy\browser.py", line 
123, in set_selenium_local_session
browser = webdriver.Firefox(
File "C:\Users\User\AppData\Roaming\Python\Python39\site- 
packages\selenium\webdriver\firefox\webdriver.py", line 174, in __init__
self.service.start()
File "C:\Users\User\AppData\Roaming\Python\Python39\site- 
packages\selenium\webdriver\common\service.py", line 71, in start
self.process = subprocess.Popen(cmd, env=self.env,
File "C:\Program Files\Python\lib\subprocess.py", line 951, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\Python\lib\subprocess.py", line 1420, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
OSError: [WinError 193] %1 �� �������� ����������� Win32
Exception in thread Thread-3:
Traceback (most recent call last):
File "C:\Program Files\Python\lib\threading.py", line 973, in _bootstrap_inner
self.run()
File "C:\Program Files\Python\lib\threading.py", line 910, in run
self._target(*self._args, **self._kwargs)
File "c:\Users\User\Desktop\inst\inst.py", line 99, in follow_by_list
user_session = InstaPy(username=user.name, 
File "C:\Users\User\AppData\Roaming\Python\Python39\site-packages\instapy\instapy.py", line 
327, in __init__
self.browser, err_msg = set_selenium_local_session(
File "C:\Users\User\AppData\Roaming\Python\Python39\site-packages\instapy\browser.py", line 
122, in set_selenium_local_session
driver_path = geckodriver_path or get_geckodriver()
File "C:\Users\User\AppData\Roaming\Python\Python39\site-packages\instapy\browser.py", line 
38, in get_geckodriver
sym_path = gdd.download_and_install()[1]
File "C:\Users\User\AppData\Roaming\Python\Python39\site- 
packages\webdriverdownloader\webdriverdownloader.py", line 225, in download_and_install
shutil.copy2(src_file, dest_file)
File "C:\Program Files\Python\lib\shutil.py", line 435, in copy2
copyfile(src, dst, follow_symlinks=follow_symlinks)
File "C:\Program Files\Python\lib\shutil.py", line 264, in copyfile
with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
PermissionError: [Errno 13] Permission denied: 
'C:\Users\User\InstaPy\assets\geckodriver.exe'

代码:

class User
    #...

def run():
    following = ["user1", "user2"]
    threads = []
    for user in user_accs:
        t = Thread(target=Giv.follow_by_list, args=(user, following,), group=None)
        threads.append(t)
        t.start()
  
    for t in threads:
        t.join()

def follow_by_list(user, following):
    user_session = InstaPy(username=user.name, 
                password=user.password,
                proxy_username=user.proxy_username,
                proxy_password=user.proxy_password,
                proxy_address=user.proxy_address,
                proxy_port=int(user.proxy_port))
    user_session.login()     
    user_session.follow_by_list(followlist=following, times=1, interact=False)
    user_session.end(threaded_session=True)

def main():
    run()


if __name__ == "__main__":
    main()

如果我为一个帐户调用代码一切正常:

#...
for user in user_accs:
    t = Thread(target=Giv.follow_by_list, args=(user, following,), group=None)
    threads.append(t)
    t.start()
    break # for one account
#...

因为每个 InstaPy 线程都尝试 download_and_install() GeckoDriver there seems to be resource lockage 的单独实例。因此您会看到错误:

PermissionError: [Errno 13] Permission denied: 'C:\Users\User\InstaPy\assets\geckodriver.exe'

一个理想的解决方案是下载并制作 make GeckoDriver readily available so any thread can use the same GeckoDriver 以跨越新服务,而无需单独下载它们。