Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列表中的函数随机化?_Python_Selenium_Random - Fatal编程技术网

Python 如何将列表中的函数随机化?

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

我编写了一个脚本,使用Selenium登录instagram,搜索标签并从左到右单击前3张图片

它首先在第一行从左到右打开第一张图片,然后喜欢该图片,然后关闭并移动到下一张图片

对于每张图片,我都编写了一个函数Pic_1(),Pic_2(),Pic_(3)。 并将其放入列表中

然后,为了避免被Instagram发现,我使用了shuffle方法。然而,当我使用洗牌方法(我也尝试了选择)时,它仍然从图片1到图片3,并且不会像我所希望的那样随机化

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
应该是你的选择。

我已经编辑了这个示例,现在将调用你的函数中的打印。嘿,伙计,这就像黄油中的一把热刀。效率很高。谢谢