内容:
confirm()
对话框,询问用户“您是否要提交数据”我的意图:
我的脚本将一直等到用户单击按钮。一旦检测到用户单击了按钮,我的脚本将获取一个元素的值,然后(以某种方式)在对话框上单击“ 确定”。
题:
如何等待用户单击按钮?
附加条款:
使用:chromedriver,Python 2.7
按钮: <input id="submitID" type="button" class="medium" value="Submit filled Data">
[编辑]一些代码片段:
对话框弹出是javascript弹出窗口:
if (window.confirm("Are you sure you want to submit the data?")) {
this.SaveData();
}
Run Code Online (Sandbox Code Playgroud)
我的代码(对此问题进行了简化和修改):
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
PATH_TO_CHROMEDRIVER = 'path/to/chromedriver'
URL = 'https://website-asking-user-to-fill-in-stuff.com'
driver = webdriver.Chrome(PATH_TO_CHROMEDRIVER)
driver.get(URL)
while True:
# loop until user close the chrome.
# If anyone has …
Run Code Online (Sandbox Code Playgroud) 现在,我将其用作检测用户何时关闭浏览器的一种方法:
while True:
try:
# do stuff
except WebDriverException:
print 'User closed the browser'
exit()
Run Code Online (Sandbox Code Playgroud)
但我发现这是非常不可靠的解决方案,因为 WebDriverException
捕获了很多异常(如果不是全部),而且大多数不是由于用户关闭浏览器而导致的。
我的问题是:如何检测用户何时关闭浏览器?
所以即使pip install pysqlcipher3
工作回来了Successfully installed pysqlcipher3
,也没有。
根据我的研究,对于尝试安装 Sqlcipher 的 Windows 用户来说,这似乎是一个常见问题。
尝试 #1
首先,我尝试从 github 下载 pysqlcipher3 并通过 cmd(使用python setup.py build
和python seetup.py install
)手动构建和安装它。
执行后,python3 setup.py build
我遇到了一些错误(缺少一些要求,环境变量中没有 OPENSSL_CONF 等)但我修复了其中的大部分。
但是,我最终陷入了这个错误:
fatal error C1083: Cannot open include file: 'sqlcipher/sqlite3.h': No such file or directory
.
尝试#2
我在某处读到(我认为)我必须在安装PySqlCipher3之前安装SQLCipher。
经过检查,我发现我必须付费才能获得预构建的可执行文件或自己构建它。
所以我尝试按照本教程自己构建它。
安装完所有要求并按照步骤操作后,我到达了另一个死胡同。在最后一步(第 6 步)中,执行时nmake /f Makefile.msc
出现此错误:
fatal error C1083: Cannot open include file: 'stdio.h': No such file …
如何在使用 Python 2.7 Selenium 打开的浏览器中编辑元素。假设我有这个元素:
<span id="some-random-number">100</span>
Run Code Online (Sandbox Code Playgroud)
我知道您可以通过以下方式找到文本:
driver.find_element_by_id("some-random-number").text
Run Code Online (Sandbox Code Playgroud)
但我希望元素的文本更改为 200,所以:
<span id="some-random-number">200</span>
Run Code Online (Sandbox Code Playgroud)
我该怎么做?除了文本之外,我还可以编辑元素的属性,例如:
<div class="something" style="transition: transform 1000ms bla bla bla"></div>
Run Code Online (Sandbox Code Playgroud)
我的脚本可以读取属性并将 1000 毫秒编辑为不同的值吗?
有没有办法使用python(而不是任何外部软件)来像麦克风输入一样播放mp3文件?
例如,我有一个 mp3 文件和一个 python 脚本,它会通过我的麦克风播放它,所以语音室的其他人会听到它。正如我所说,这只是一个例子。
当然,我也做过一些研究。我发现我可以使用一个软件来创建一个虚拟设备并且做一些事情来获得结果。但我的观点是,是否可以不安装软件但使用某种 python 脚本?
正如一些 StackOverflow 答案所示,您可以使用 .gzip 获得准确的 gzip 解压缩文件大小decompressedSize = gzipFile.seek(0, io.SEEK_END)
。有些人还建议对小于 4 GiB 的文件执行此操作.seek(-4, 1)
。但是,由于它会遍历整个文件直至结束,因此对于较大的文件来说非常耗时(对于大约 1 GiB 的解压数据,需要几秒钟才能找到结束)。
然后我尝试使用gunzip -l somefile.gz
(同一文件),它设法立即输出当前文件大小以及解压缩时的文件大小。
我怎样才能以gunzip
最快的速度获得解压缩的 gzip 文件的大小?
(PS 我尝试获取解压后的 gzip 大小的原因是解压时的 CLI 进度条)
我怎样才能减慢.send_keys()
?所以也许它发送的每封信之间可能会有 0.25 秒的延迟?
前言
它看起来像是几个 stackoverflow 问题的重复,但我的情况(可能)有点独特。
我的情况
我有一本字典。键是字符串,值是整数。
我希望 python 脚本随机选择N个键。
该值是它被选择的可能性。密钥的值越高,随机选择密钥的机会就越大。
我的解决方案
因此,利用其他一些 StackOverflow 帖子和互联网的力量,我设法使用Weighted Random解决了这个问题。
DICT_VAR= {'best':308281009, 'good':7066325, 'meh':26884, 'bad':71, 'terrible':16, 'never':0}
list_var = []
for i in DICT_VAR.keys():
list_var.extend([i]*DICT_VAR[i])
print random.sample(list_var, 2) # get 2 random choice I suppose
Run Code Online (Sandbox Code Playgroud)
问题(陷阱)
正如您可能注意到的,字典中的值可以非常大(可以无限大),也可以小到 0(零是最小的,没有负数)。
运行这段代码(使用更大的数字)会导致我的计算机冻结并且没有响应,直到我硬重置它。
我的问题
我该如何处理这种情况?有没有其他适合我的情况的随机选择方法,因为加权随机是当前情况下最糟糕的解决方案。
我怎样才能填充入口小部件,使其不会在小部件的边界处开始书写?在视觉上,与入口小部件边框有一点空间。
我的进度:
entry_widget.bind('<FocusIn>', lambda f: entry_widget.insert(0, ' '))
Run Code Online (Sandbox Code Playgroud)
当用户单击小部件时,这会添加一个空白空间,但此解决方案存在多个问题:
当点击退出并重新点击时,它会在空白区域或用户填写的任何文本的顶部添加另一个空间。我考虑过清除条目小部件,FocusOut
但这也会清除用户可能编写的所有文本。
用户可以删除插入的空间
获取内容时,开头有额外的空间。虽然这是一个小问题,可以通过删除内容的第一个字符来解决。
可能还有更多我没有考虑的问题。
我认为我的代码前进的方式很糟糕,因此我问是否有人知道如何“正确”填充条目小部件?
我有一个字符串 string = 'some.value:so this-can be:any.thing, even some.value: too'
我想剥掉'some.value:'
左边的那个.
我失败的尝试:
>>> string.lstrip('some.value:')
' this-can be:any.thing, even some.value: too'
>>> string.replace('some.value:','')
'so this-can be:any.thing, even too'
>>> string.split(':')[1]
'so this-can be'
Run Code Online (Sandbox Code Playgroud)
预期产量: so this-can be:any.thing, even some.value: too
我认为最接近我的答案是使用lstrip()
.我怎么能告诉它lstrip()
完全删除整个短语?
[!]不使用任何库是首选!
注意:有一个类似的问题,但答案不适用于我.
python ×10
selenium ×4
attributes ×1
audio ×1
biginteger ×1
button ×1
click ×1
compression ×1
dictionary ×1
element ×1
exit ×1
gunzip ×1
gzip ×1
input ×1
installation ×1
javascript ×1
microphone ×1
mp3 ×1
pad ×1
percentage ×1
performance ×1
pysqlcipher ×1
python-2.7 ×1
random ×1
sqlcipher ×1
string ×1
strip ×1
time ×1
tkinter ×1