首页 > 解决方案 > 如何循环单击按钮然后向下单击

问题描述

我目前正在尝试在 Python 上编写一个机器人,该机器人应该在 Twitter 上关注用户的关注者。我对 Python 很陌生,这就是为什么要问这个问题。

我想要的是:

  1. 获取关注按钮。
  2. 点击关注按钮。
  3. 延迟。
  4. 转到下一个按钮
  5. 重复 x 次。(不应该是无限的,但你可以改变数量。)

我当前的代码:

import time
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
import pickle
import pprint


class TwitterBot:
    def __init__ (self, username, password):
        self.username = username
        self.password = password
        self.bot = webdriver.Chrome()


    def login (self):
        bot = self.bot
        bot.get("https://twitter.com/login")
        time.sleep(3)
        email = bot.find_element_by_class_name("r-30o5oe.r-1niwhzg.r-17gur6a.r-1yadl64.r-deolkf.r-homxoj.r-poiln3.r-7cikom.r-1ny4l3l.r-t60dpp.r-1dz5y72.r-fdjqy7.r-13qz1uu")
        password = bot.find_element_by_name("session[password]")
        email.send_keys(self.username)
        password.send_keys(self.password)
        password.send_keys(Keys.RETURN)
        time.sleep(3)


    def follow (self, user):
        bot = self.bot
        bot.get("https://twitter.com/"+ user + "/followers/")
        time.sleep(3)
        users= bot.find_element_by_xpath("//div[@data-testid='UserCell']//span[contains(text(),'Follow')]")
        users.click()




BOT = TwitterBot("MYUSERNAME", "MYPASSWORD")
BOT.login()
BOT.follow("A_USER")```

标签: pythonseleniumtwitterautomation

解决方案


因此,从您已经完成的操作开始,作为follow()函数,已经获取follow button单击它,为了在您的程序中实现也4.5.目标,您可以执行以下操作:

  1. 要获得所有follow buttons,您可以array从以下所有内容中elements进行操作twitter follow buttons class

class="css-18t94o4 css-1dbjc4n r-1niwhzg r-p1n3y5 r-sdzlij r-1phboty r-rs99b7 r-1w2pmg r-15ysp7h r-gafmid r-1ny4l3l r-1fneopy r-o7ynqc r-6416eg r-lrvibr

并将其存储在变量中,因此:

followButtons = Array.from(document.querySelectorAll('[class="css-18t94o4 css-1dbjc4n r-1niwhzg r-p1n3y5 r-sdzlij r-1phboty r-rs99b7 r-1w2pmg r-15ysp7h r-gafmid r-1ny4l3l r-1fneopy r-o7ynqc r-6416eg r-lrvibr"]'), element => element);
  1. 拥有所有 后follow clickable elements,您可以使用功能单击它们click(),使用 afor loop并将delay(3.)设置为time.sleep
for (i = 0; i < followButtons.length; i++) {
  followButtons[i].click()
  time.sleep(3)
}

我还建议您等待直到页面完全加载以执行您的脚本,使用async-await 函数并将您使用浏览器从您的机器人打开的 twitter 页面存储在一个变量中,例如page

(async () => {
    const browser = await puppeteer.launch();    //using puppeteer as example
    const page = await browser.newPage();
    await page.goto(twitterurl);                 //in twitterurl store the link of the page

    const result = await page.evaluate(() => Array.from(document.querySelectorAll('[class="css-18t94o4 css-1dbjc4n r-1niwhzg r-p1n3y5 r-sdzlij r-1phboty r-rs99b7 r-1w2pmg r-15ysp7h r-gafmid r-1ny4l3l r-1fneopy r-o7ynqc r-6416eg r-lrvibr]'), element => element));

//rest of the code

})

推荐阅读