我正在开发一个GUI桌面应用程序,让用户可以控制网络刮板。我有两个可执行文件,一个运行Selenium scraper(Py27),另一个运行GUI,GUI使用subprocess.Popen
(Python 38)启动和停止scraper。不幸的是,我现在不可能在两个应用程序中使用相同的Python版本。尽管由于Python版本的差异,我们似乎没有遇到环境问题
我在Windows上,使用Selenium 3.141、Geckodriver 0.26、cx_Freeze 5和Firefox 77
我可以毫无问题地手动运行这两个exe,但是当我试图通过GUI exe运行scraper exe时,它陷入了一个无限循环,即创建一个包含User.js的tmp目录,打开一个geckodriver命令提示符,然后关闭并重新开始。它最终会不断生成越来越多的tmp目录,直到我关闭GUI窗口为止。回溯告诉我一些事情——Geckodriver遇到权限错误,应用程序在建立主目录时遇到问题
我已经测试过使用Popen启动刮取过程,所以这不是问题所在
当我手动运行它并转储Firefox选项,并将其与通过GUI运行时的Firefox选项进行比较时,会有一些不同。这来自手动(成功)运行时的FF配置文件:
'userPrefs': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna\\user.js',
'profile_dir': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna',
'extensionsDir': 'c:\\users\\atadmin\\appdata\\local\\temp\\tmpqctvna\\extensions',
这是不成功GUI运行的配置文件:
'userPrefs': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl\\user.js',
'profile_dir': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl',
'extensionsDir': 'c:\\users\\atadmin\\documents\\aeleads-master\\aeleads-portal-testing\\build\\exe.win-amd64-3.8\\tmpu9ktpl\\extensions',
以下是最新的追踪:
Can't determine home directory
utils.tss_logging: Logging initailizing with None/None
Error: Traceback (most recent call last):
File "li_scraper.py", line 63, in run_scraper
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 394, in collection
self.login()
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 85, in login
driver = self._get_driver(use_proxy=self.use_proxy)
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\scrape\scraper.py", line 622, in _get_driver
use_proxy=use_proxy, reserve_proxy=False)
File "C:\Users\atadmin\Documents\aeleads-master\aeleads-portal-testing\lib\webdrivers.py", line 164, in open_webdriver
capabilities=capabilities, log_path="C:\\Users\\atadmin\\Documents\\aeleads-master\\geckodriver.log")
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 174, in __init__
keep_alive=True)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Python27\Py27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: permission denied
似乎cx_Freeze创建了自己的构建环境,可能导致我丢失了基于权限错误的用户。我对Python相当陌生
我明白了。在将环境传递到Popen中时,我传递的是一个剥离的环境,其中不包括临时路径。我传入了完整的环境,然后更改了需要更改的变量,现在它开始工作了
相关问题 更多 >
编程相关推荐