Python 如何将列表中的函数随机化?
我编写了一个脚本,使用Selenium登录instagram,搜索标签并从左到右单击前3张图片 它首先在第一行从左到右打开第一张图片,然后喜欢该图片,然后关闭并移动到下一张图片 对于每张图片,我都编写了一个函数Pic_1(),Pic_2(),Pic_(3)。 并将其放入列表中 然后,为了避免被Instagram发现,我使用了shuffle方法。然而,当我使用洗牌方法(我也尝试了选择)时,它仍然从图片1到图片3,并且不会像我所希望的那样随机化Python 如何将列表中的函数随机化?,python,selenium,random,Python,Selenium,Random,我编写了一个脚本,使用Selenium登录instagram,搜索标签并从左到右单击前3张图片 它首先在第一行从左到右打开第一张图片,然后喜欢该图片,然后关闭并移动到下一张图片 对于每张图片,我都编写了一个函数Pic_1(),Pic_2(),Pic_(3)。 并将其放入列表中 然后,为了避免被Instagram发现,我使用了shuffle方法。然而,当我使用洗牌方法(我也尝试了选择)时,它仍然从图片1到图片3,并且不会像我所希望的那样随机化 def Pic_1(): #Picture 1
def Pic_1():
#Picture 1 from Left to Right
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div'))
).click()
time.sleep(1)
#Like Button <3
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button'))
).click()
#Close Picture Button
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[3]/button'))
).click()
def Pic_2():
#Picture 2 from Left to Right
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[2]'))
).click()
time.sleep(1)
#Like Button <3
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button'))
).click()
#Close Picture Button
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[3]/button'))
).click()
def Pic_3():
#Picture 3 from Left to Right
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[3]'))
).click()
time.sleep(1)
#Like Button <3
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button'))
).click()
#Close Picture Button
search_element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH, '/html/body/div[5]/div[3]/button'))
).click()
import random
mylist = [Pic_1(), Pic_2(), Pic_3()]
print(random.shuffle(mylist)
def Pic_1():
#图1从左到右
search_element=WebDriverWait(driver,10)。直到(
EC.元素的存在位置((By.XPATH,'/*[@id=“react root”]/section/main/article/div[1]/div/div/div[1]/div[1]/a/div'))
)。单击()
时间。睡眠(1)
#Like按钮不调用列表中的函数。您正在调用函数,然后进行洗牌,但此时函数已经执行,所以您只是洗牌函数返回的None
s
functions = [Pic_1, Pic_2, Pic_3] # Not called!
random.shuffle(functions)
for f in functions: # Loop over the shuffled functions
f()
似乎这些函数中唯一不同的地方就是div[2]
部分。您可以在循环中生成1-3之间的随机数,将该数传递给通用函数,该函数将数据插入不同的点。然后你只需要在一个循环中用随机数调用函数。在我看来,你可以使用random.choice(mylist)
来实现你的目标,如果你真的想随机点击行为,因为一张图片也可能被点击多次
示例
import random
from time import sleep
def p():
print ('p')
def pp():
print('pp')
def ppp():
print('ppp')
mylist = [p, pp, ppp]
for f in mylist:
random.choice(mylist)()
sleep(1)
*如果这不是你想要的,shuffle
应该是你的选择。我已经编辑了这个示例,现在将调用你的函数中的打印。嘿,伙计,这就像黄油中的一把热刀。效率很高。谢谢