python - 如何循环单击按钮然后向下单击
问题描述
我目前正在尝试在 Python 上编写一个机器人,该机器人应该在 Twitter 上关注用户的关注者。我对 Python 很陌生,这就是为什么要问这个问题。
我想要的是:
- 获取关注按钮。
- 点击关注按钮。
- 延迟。
- 转到下一个按钮
- 重复 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")```
解决方案
因此,从您已经完成的操作开始,作为follow()
函数,已经获取follow button
并单击它,为了在您的程序中实现也4.
和5.
目标,您可以执行以下操作:
- 要获得所有
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);
- 拥有所有 后
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
})
推荐阅读
- html - 如何检查一个值是否在数组中并使用复选框进行检查
- kubernetes - 如何从 kube 集群外部调用服务中的特定 pod
- sql-server - 创建大型 xml 文件时出现 SSIS-MEMORY 错误
- javascript - 如何检查表单中是否单击了动态生成的单选按钮?
- android - 如何将数据从 arduino 发送到通过 wifi 处理?
- c# - 小数字段必须是 .net core 2.2 中的数字
- php - 隐藏 proc_open 命令的输出
- c# - 在 postgres 中读取已提交的隔离级别
- amazon-web-services - How to connect to AWS EMR via AWS QuickSight
- java - Read file with ClassLoader