我正在尝试制作一个自动更新Google Plus电子表格的应用程序.为了做到这一点,我必须设置gspread
,这也需要pyOpenSSL才能工作.没有它,它会抛出此错误:
CryptoUnavailableError:没有可用的加密库
使用pip
,我输入命令:
pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)
并导入使用:
from OpenSSL import SSL
Run Code Online (Sandbox Code Playgroud)
当我尝试运行代码时,收到以下错误:
ImportError:没有名为cryptography.hazmat.bindings.openssl.binding的模块
我已经尝试多次重新安装pyOpenSSL,并尝试重新安装加密依赖项(以及尝试安装以前版本的pyOpenSSL).
这个问题记录了几次,但我没有尝试的唯一解决方案是重新安装python或操作系统.
有什么建议?提前致谢.
因此,我一直在尝试在线研究解决方案,但它们似乎都不起作用,要么是因为我做错了,要么它们不适用于我的情况。
我有一个网页,为用户提供了输入电子邮件/通行证等的位置。当他们按下提交时,它会调用一个发布函数,其中包含所有验证。就像这样:
app.post('/check', function(req, res){
function emailCheck(email){
//when theres an error: console.log(error), and return false
}
function passCheck(password){
//when theres an error: console.log(error), and return false
}
if (passCheck == true && emailCheck == true){
//enter user into database
}
}
Run Code Online (Sandbox Code Playgroud)
当出现错误时,我希望通过使用弹出框或仅在注册框下方显示文本来将其显示给用户。
任何建议都会很棒。
我所能得到的所有示例都没有真正解决我的问题,即后台中的某个程序不断循环,而程序的其余部分仍在继续。
下面是一个使用 _thread 的简单方法示例:
import _thread
import time
def countSeconds():
time.sleep(1)
print("Second")
_thread.start_new(countSeconds, ())
def countTenSeconds():
time.sleep(10)
print("Ten seconds passed")
_thread.start_new(countTenSeconds, ())
_thread.start_new(countSeconds, ())
_thread.start_new(countTenSeconds, ())
Run Code Online (Sandbox Code Playgroud)
忽略一个明显的事实,即我们可以跟踪秒数,并且如果它是十的倍数,则只打印不同的内容,我将如何更有效地创建它。
在我的实际程序中,线程似乎会消耗大量内存,我假设是通过创建线程的多个实例来实现的。我是否必须在每个过程结束时“start_new”线程?
谢谢你的帮助。
下面是我正在使用的代码 - 我试图使其尽可能简洁。
import selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import bs4
options=Options()
#options.add_argument('--headless') # Works while not headless?
options.add_argument('--disable-gpu') # Last I checked this was necessary.
options.add_argument("--user-data-dir=profiles\\") #Keeps login data
options.add_argument("--profile-directory=Profile 1")
driver=webdriver.Chrome(chrome_options=options)
driver.get("http://www.google.com")
html=driver.page_source
soup=bs4.BeautifulSoup(html, "html.parser")
print(soup)
Run Code Online (Sandbox Code Playgroud)
主要问题源于--user-data-dir
和--profile-directory
参数。在我的测试示例中,自定义 chrome 配置文件(通常位于C:\Users\User\AppData\Local\Google\Chrome\User Data
)位于当前目录中,以使其与任何当前正在运行的 chrome 会话分开。
如果--headless
在使用上述参数时启用了该参数,驱动程序将挂起(CMD 保持不变,不会在 Python 命令行上产生输出)。但是,当未启用时,窗口会弹出并按预期执行。
但是,--headless
在使用上述默认目录中的任何配置文件时确实有效。
这是控制台输出;
[0120/222514.611:ERROR:gpu_process_transport_factory.cc(967)] Lost UI shared context.
DevTools listening on ws://127.0.0.1:59961/devtools/browser/ee317ed6-93c7-47c2-b26d-63647980ba0d
[0120/222514.619:ERROR:devtools_http_handler.cc(289)] Error writing DevTools active port to …
Run Code Online (Sandbox Code Playgroud) 虽然这个问题已经在这个帖子中提出过:
我在放置此代码的位置时遇到问题:
$(document).ready(function() {
$('select').material_select();
});
Run Code Online (Sandbox Code Playgroud)
目前,我能想到的最合乎逻辑的事情就是这样:
<body>
<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="js/materialize.min.js">
$(document).ready(function() {
$('select').material_select();
});
</script>
<div class="input-field col s12">
<select>
<option value="" disabled selected>Choose your option</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<label>Materialize Select</label>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
我已经尝试将"文档"更改为我的文档名称,在本例中为"index",但它仍然无法正常工作.
我只是慢吗?
提前致谢.