Complaining Twitter Bot
- execute_script()
Python (또는 다른 언어의 셀레늄 바인딩을 사용하는 경우)에서 직접 JavaScript 코드를 실행할 수 있게 해줌
웹 페이지가 로드된 브라우저 컨텍스트 내에서 실행되기 때문에, 페이지에 존재하는 요소를 조작하거나, 페이지의 상태를 검사하거나, 사용자 정의 스크립트를 실행하는 데 유용
execute_script() 메서드는 두 가지 주요 매개변수를 받는다
script: 실행할 JavaScript 코드를 문자열로 전달합니다.
*args: JavaScript 코드 내에서 사용할 인자들을 전달
이 인자들은 JavaScript 코드 내에서 arguments[0], arguments[1], arguments[n] 등으로 접근할 수 있다.
Instagram Follower Bot
- ChromeDriverManager().install() 사용자의 운영체제와 크롬 브라우저 버전에 맞는 ChromeDriver의 최신 버전을 찾아서, 필요한 경우 다운로드하고, 해당 드라이버의 경로를 반환 이 경로는 Selenium에서 WebDriver 인스턴스를 생성할 때 사용된다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import ElementClickInterceptedException
from selenium.webdriver.common.by import By
import time
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)
# `webdriver_manager`를 사용하여 ChromeDriver를 자동으로 관리하는 코드
service = Service(ChromeDriverManager().install())
SIMILAR_ACCOUNT = "cats_of_instagram"
USERNAME = "harvey_purry"
PASSWORD = ""
class InstaFollower:
def __init__(self):
self.driver = webdriver.Chrome(service=service, options=chrome_options)
def login(self):
self.driver.get("https://www.instagram.com/accounts/login/")
time.sleep(5)
username = self.driver.find_element(By.NAME, "username")
password = self.driver.find_element(By.NAME, "password")
username.send_keys(USERNAME)
password.send_keys(PASSWORD)
time.sleep(2)
password.send_keys(Keys.ENTER)
def find_followers(self):
time.sleep(10)
self.driver.get(f"https://www.instagram.com/{SIMILAR_ACCOUNT}")
followers_css_selector = "a._alvs._a6hd"
WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable((By.CSS_SELECTOR, followers_css_selector))
)
followers = self.driver.find_element(By.CSS_SELECTOR, followers_css_selector)
followers.click()
time.sleep(2)
modal = self.driver.find_element(By.CSS_SELECTOR, '._aano')
self.driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", modal)
time.sleep(2)
# for i in range(10):
# self.driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", modal)
# time.sleep(2)
def follow(self):
all_buttons = self.driver.find_elements(By.CSS_SELECTOR, "button._acan")
time.sleep(2)
for button in all_buttons:
try:
button.click()
time.sleep(1)
except ElementClickInterceptedException:
cancel_button = self.driver.find_element(By.XPATH, '/html/body/div[5]/div/div/div/div[3]/button[2]')
cancel_button.click()
bot = InstaFollower()
bot.login()
bot.find_followers()
bot.follow()