Всем привет, это парсер комментариев с твитов и чекер балансов на кошельках SOLANA по комментариям с твитера. Помогал местному мемберу форума, он хотел чтобы я написал ему реализацию через API твитера, но увы это дорого, решил сделать через библиотеку Selenium . Ему допиливаю более крутую версию, эту выкладываю под хайд. Может кому будет интересно посмотреть как парсится Twitter без API.
Автор: rand
Экслюзивно для: xss.pro
Нужные библиотеки для запуска:
P.S. Если интересно как работает, скину ссылку на видео, пишите в ПМ.
Автор: rand
Экслюзивно для: xss.pro
Нужные библиотеки для запуска:
Код:
pip install urllib3==1.26.16
pip install selenium==3.141.0
pip install webdriver_manager
pip install requests
У вас должно быть более 55 реакций для просмотра скрытого контента.
Python:
import requests
import argparse
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.firefox import GeckoDriverManager
from time import sleep
from contextlib import redirect_stdout
# Логин и Пасс от твитера
twitter_usr="smith_john77777"
twitter_pass='johnsmith77777'
# Ссылка на твит с комментариями
TARGET_TWEET='https://x.com/777777/status/180594271456077777'
def twitter_login(driver, twitter_usr=str, twitter_pass=str):
driver.get('https://x.com/i/flow/login')
sleep(6)
user = driver.find_element(by=By.XPATH, value='//*[@autocomplete="username"]')
sleep(1)
user.send_keys(twitter_usr)
sleep(1)
user.send_keys(Keys.RETURN)
sleep(15)
psswd_in = driver.find_element(by=By.XPATH, value='//*[@autocomplete="current-password"]')
psswd_in.send_keys(twitter_pass)
sleep(1)
psswd_in.send_keys(Keys.RETURN)
sleep(3)
print('Login Successful')
return driver
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
twitter_login(driver, twitter_usr=twitter_usr, twitter_pass=twitter_pass)
tweets = []
driver.get(TARGET_TWEET)
sleep(6)
MAX_SCROLLS = 5
for _ in range(MAX_SCROLLS):
last = driver.find_elements(By.XPATH, '//div[@data-testid="cellInnerDiv"]')[-1]
driver.execute_script("arguments[0].scrollIntoView(true)", last)
sleep(.2)
all_tweets = driver.find_elements(By.XPATH, '//div[@data-testid]//article[@data-testid="tweet"]')
for item in all_tweets[1:]: # Пропускаем первый твит и начинаем итерацию цикла
try:
date = item.find_element(By.XPATH, './/time').text
except:
date = '[empty]'
try:
text = item.find_element(By.XPATH, './/div[@data-testid="tweetText"]').text
except:
text = '[empty]'
try:
replying_to = item.find_element(By.XPATH, './/div[@data-testid="User-Name"]').text
except:
replying_to = '[empty]'
tweets.append([replying_to, text])
sleep(.2)
print(f'Found {len(tweets)} replies.')
# Функция парсера криптовалюты SOLANA
def parser_solana(tweets):
for i in range(len(tweets)):
parser = argparse.ArgumentParser()
#print(tweets[i])
# Задаем аргументы для парсинга
parser.add_argument('--server', help='address of cluter server',default="http://api.mainnet-beta.solana.com")
parser.add_argument('--soladdress', help='sol account',default=f"{tweets[i][1]}")
args = parser.parse_args()
# Прописываем хедер
headers = {
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
'Content-Type': 'application/json',
'Accept': '*/*',
'Origin': 'https://explorer.solana.com',
'Sec-Fetch-Site': 'same-site',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': 'https://explorer.solana.com/',
'Accept-Language': 'en-US,en;q=0.9,vi;q=0.8',
}
# Получаем JSON
data = '{"method":"getAccountInfo","jsonrpc":"2.0","params":["'+args.soladdress+'",{"encoding":"jsonParsed","commitment":"single"}],"id":"75bd3474-7b27-49df-9dc5-f50576674992"}'
# print(data)
login_info_mass = str(tweets[i][0])
login_info = login_info_mass.replace("\n", " ")
try:
response = requests.post(args.server, headers=headers, data=data)
solbalance = float(response.json()["result"]["value"]["lamports"])
except:
try:
with open('output_bad.txt', 'w') as bad_file, redirect_stdout(bad_file):
print(f'Bad account [{login_info}]" + {args.soladdress}')
continue
except:
continue
# Выводим баланс и сохраняем в файл
# Вывод 'print' отправляется в 'output.txt'
print(f'Balance SOL of account [{login_info}]" + {args.soladdress}": "{solbalance / 1000000000}" SOL\n')
with open('output.txt', 'w') as f, redirect_stdout(f):
print(f'Balance SOL of account [{login_info}]" + {args.soladdress}": "{solbalance/1000000000}" SOL\n')
parser_solana(tweets)
P.S. Если интересно как работает, скину ссылку на видео, пишите в ПМ.
Последнее редактирование: