【解決】「詐欺アカ作成のリスト」から、Tweepyで自分を削除したい
Q&A
Closed
解決したいこと
Python+Tweepyで、自分が追加されている「詐欺アカ作成のリスト」から、自分を削除したい
発生している問題
自分をリストに載せている詐欺アカを、下記リンクの手順通りにブロックすれば確かにリストから消えるのですが、これをTweepyでやろうとしても上手く出来ません。
https://note.com/atsuko_writer55/n/n948dfc791b0c
ブロックは出来るのですが、リストから自分が消えていないのです。
作成したコードは下記です。
※下記リンクを参考にしました
https://note.com/nova603/n/nce6eba84cda4
import utils
import tweepy
user_ID="xxxxx" #あなたのID
password="xxxxx" #あなたのパスワード
block_users = "xxxxx" #ブロックしたいユーザID
api = utils.get_cookie_api(user_ID,password)
api.create_block(screen_name=block_users)
自分で試したこと
下記のコードでダメだったので、
api.create_block(screen_name=block_users)
これも試しましたが、スパム報告+ブロックというだけで、結果は同じでした。
api.report_spam(screen_name=block_users)
他にコマンドが無いか下記リンクで探したのですが、見つかっていません。
https://docs.tweepy.org/en/stable/index.html
解決法をご存じの方がいらっしゃいましたら、ご教授お願いします。
※ちなみに詐欺アカが私を載せていたリストはこんな状態でした。
【解決】2023.7.25追記
@surugamachi 氏にご教授頂いた praywright を試し、成功しました。
心より感謝申し上げます。
【動作フロー】
①tweepyを使用して、自分がメンバーとなっているリストを取得する
②リストを一つずつチェックし詐欺アカかどうか判定し、ブロック予定リストを作成する
■ここからpraywrightを使用
③自分のTwitterホーム画面を開く(ログイン動作含む)
④「リスト」をクリック
⑤右上の「・・・」をクリックし、「自分がメンバーとなっているリスト」をクリック
⑥事前に作成したブロック予定リストを順番に照合し、表示されているリストに同じ名前があればクリック
⑦右上の「・・・」をクリックし、「●●さん(リスト作成者)をブロックする」をクリック
⑧リスト画面に戻り、⑥~⑦を繰り返す
※とりあえず動けば良いという感じで、おかしな記述法があると思いますがご容赦ください。
※特に詐欺アカ判定のchk変数郡とif文は恥ずかしいので触れないで下さい。
※UI部分などは省いて転記したので、このままコピペでは動かない可能性があります。
※適宜修正してお使いください。
近々TwitterからXに変更され金融取引との連動メインになるとの事で、文化や言論の共有拡散ツールとしての価値は失われると思いますが、それまでの短い間、邪魔な詐欺アカ対策にご活用して頂ければ幸いです。
import utils
import tweepy
from playwright.sync_api import Playwright, sync_playwright, expect
block_lists = []
block_list_makers = []
user_ID = "xxxxxx" #あなたのTwitterID
password = "xxxxxx" #あなたのTwitterパスワード
hit_count = 0
api = utils.get_cookie_api(user_ID,password)
mem_list = api.get_list_memberships(screen_name=user_ID)
for mem in mem_list:
chk1=0;chk2=0;chk3=0;chk4=0;chk5=0;chk6=0;chk7=0;chk8=0;chk9=0;chk10=0;chk11=0
if str(mem.user.description).rfind("副業") > 0:chk1 = 1
if str(mem.user.description).rfind("現金") > 0:chk2 = 1
if str(mem.user.description).rfind("資産") > 0:chk3 = 1
if str(mem.user.description).rfind("高配当株") > 0:chk4 = 1
if str(mem.user.description).rfind("プレゼント") > 0:chk5 = 1
if str(mem.user.description).rfind("経営") > 0:chk6 = 1
if str(mem.user.description).rfind("🚺") > 0:chk7 = 1
if str(mem.user.description).rfind("♀") > 0:chk8 = 1
if mem.user.followers_count < 10:chk9 = 1
if mem.user.statuses_count < 5:chk10 = 1
if mem.user.favourites_count < 5:chk11 = 1
result = "Flw-Tw-Fav:" + str(mem.user.followers_count) + "-" + str(mem.user.statuses_count) + "-" + str(mem.user.favourites_count)
total = chk1 + chk2 + chk3 + chk4 + chk5 + chk6 + chk7 + chk8 + chk9 + chk10 + chk11
if total > 1 or (chk10==1 and chk11==1):
print("list: "+mem.name, "screen_name: "+mem.user.screen_name)
block_lists.append(mem.name)
block_list_makers.append(mem.user.screen_name)
hit_count = hit_count +1
messagebox.showinfo("チェック処理", "抽出数:" + str(hit_count) + " / " + str(len(block_lists)) + "\n\nチェック完了しました")
messagebox.askquestion("【ブロック処理】", "検出したアカウントを全てブロックします。\n本当によろしいですか?", icon='warning')
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
context = browser.new_context()
page = context.new_page()
page.goto("https://twitter.com/i/flow/login?redirect_after_login=%2F" + user_ID)
page.locator("label div").nth(3).click()
page.get_by_label("電話番号/メールアドレス/ユーザー名").fill(user_ID)
page.get_by_role("button", name="次へ").click()
page.get_by_label("パスワード", exact=True).click()
page.get_by_label("パスワード", exact=True).fill(password)
page.get_by_test_id("LoginForm_Login_Button").click()
page.get_by_label("リスト").click()
page.get_by_test_id("primaryColumn").get_by_label("もっと見る").click()
page.get_by_role("menuitem", name="自分がメンバーとなっているリスト").click()
for block_list in range(len(block_lists)):
chk2 = page.get_by_role("link", name=block_lists[block_list])
if chk2 == True:
chk2.click()
page.get_by_test_id("primaryColumn").get_by_label("もっと見る").click()
chk1 = page.get_by_text("@" + block_list_makers[block_list] + "さんをブロック")
if chk1 == True:
chk1.click()
page.get_by_test_id("confirmationSheetConfirm").click()
print("■ 対象リストブロック完了:" + str(block_lists[block_list]) + "/@" + str(block_list_makers[block_list]))
else:
page.get_by_role("menuitem", name="報告リスト").press("Escape")
page.get_by_test_id("app-bar-back").click()
time.sleep(1)
messagebox.showinfo("ブロック処理", "ブロック完了しました")
context.close()
browser.close()