class Websites
default = 'https://google.com'
spotify = 'https://spotify.com'
facebook = 'https://facebook.com'
twitter = 'https://twitter.com'
[...]
from websites import Websites
random_website = random.choice(list(vars(Websites).values()))
browser.get(random_website) # This line fails like 30-50% of the time
请注意,我故意不在此处使用字典,因为我想使用随机值来获取密钥。
调试时,我发现它将随机设置为以下内容:
random_website = {getset_descriptor} <attribute '__dict__' of 'Websites' objects>
我真的不确定为什么它不起作用,因为我已经多次测试了所有URL。
还请注意,此应用程序使用线程-该应用程序有多个实例(通常为4个),并且在任何给定时间大约有1-2个失败,以防万一。我对Python和Selenium还是很陌生(说实话,对编码仍然没有经验)。请让我知道是否可以提供更多有用的信息。
答案 0 :(得分:3)
vars(Websites)
object
如果打印它,您将看到各种东西,例如未绑定方法和其他常规对象属性。发生这种情况是因为对象的__dict__
自动获取了type
元类分配的一些默认元素。所有这些属性都应该是笨拙的。
因此,您有两个选择:
在您当前的课程中坚持下来并筛选出令人沮丧的内容:
items = [v for k, v in vars(Website).items() if not k.startswith('__')]
这不是推荐的方法。
values
。如果您真的不需要标签,请使用列表。答案 1 :(得分:3)
您在对Mad Physicists的回答的注释中非常清楚地阐明了您的思维过程,因此您只需要一个Python微型教程即可。
A。如何存储数据。如上所述,字典可能是最好的方法,将字符串作为键和值。您可能想处理字符串,而不是变量。
websites = {'default':'https://www.google.com', 'stack':'https://stackoverflow.com'}
B。您可以获取字典中所有键的列表,或称为 tuples 的(键,值)对的列表。这意味着将vars(Websites).values()
替换为websites.keys()
或websites.items()
。然后,您的代码将为您提供随机密钥或项目。
C。如果选择```keys()``,则可以只打印得到的随机数,然后使用该键从字典中获取相应的值。
random_key = random.choice(websites.keys())
print(random_key)
random_website = websites[random_key] # this is how you get values using keys
D。如果选择items()
,则得到的元组基本上是一个不可变的列表(您不能更改或分配任何一个值)。您可以通过在列表中指定索引来拉出它们。 Python索引从0开始。
random_item = random.choice(websites.items())
print(random_item) # something like ('default', 'https://www.google.com')
random_key = random_item[0] # this is how you choose an item from a list or tuple
print(random_key)
random_website = random_item[1]