私がこの記事を書いた主な理由は、私が記事を読んだからです。
「Pythonを使ってDouyinでこれらの見栄えの良い女神を拾った後、私は突然人生の勝者になりました。」この記事では、Python + ADB + GooseFactoryのAIを使用して一晩で1,000人以上の美しい若い女性に注意を向けるエンジニアについて簡単に説明します。
それは大学生と工場の労働者の違いを完全に反映しています。ここで私は×××牛革と言わなければなりません...
私はノボシビルスクの工場で一人で自分の人生を考え、どこに行けばいいのかを考えていました。
私もその苦しみの期間を過ごすためにvibratoに頼っていたのを覚えています。
上のボスほど良くはありません、私は人為的に認識する美しい若い女性です...
今でもグースファクトリーのAIアカウントを登録していますが、まだ使えません。
それでは、簡単なことから始めて、事前に注意を払い、Pythonを使用してストリートビデオのダウンロードを自動化しましょう。!!
/ 01 /チャールズ
Charlesを使用してビデオAPIインターフェイスを見つける場合、特定の操作はDangdangでの前のケースと同じであるため、詳細には触れません。
ここでは、Douyinアプリをスライドさせて動画のリクエスト情報を取得できます。
多くの実験を通して、リンクの後ろが変化し続けることがわかりました。リンクの前だけが常に同じです。つまり、「http:// v1-dy」、「http:// v6-dy」、「http:// v9-」です。 dy」は変更されていません。
したがって、スクリプトを作成するときは、この情報をリンクとして開始できます。
/ 02 / mitmproxy
mitmproxyのmitmdumpコンポーネントを使用して、Pythonスクリプトとインターフェイスし、Pythonで事後監視処理を実装します。
ここでは、スクリプトを使用してリンクを取得し、スクリプトを直接使用してビデオをダウンロードするのではありません。
mitmdump.exeファイルが配置されているフォルダーでスクリプトを実行しているため、requestsモジュールをスクリプトにインポートできません。
これらの厄介な環境変数をいじりたくないので、リンクを取得してください。
次に、ビデオのダウンロードに移動します。ビデオリンクの複製を解除する必要があります。重複している可能性があります。
Pythonスクリプトは次のとおりです。
def response(flow): urls = ['http:// v1-dy'、 'http:// v3-dy'、 'http:// v6-dy'、 'http:// v9-dy'] # urlをフィルタリングし、url in urlsのビデオのurlのみを選択します: if url in flow.request.url: print( ' Tik Tok Video ') with open( 'douyin.csv'、 'a +'、encoding = 'utf- 8-sig ')as f: f.write(flow.request.url +' ')
/ 03 /エポック
DouyinのAppiumパラメーターを構成します。
青いボタンをクリックすると、電話が自動的にDouyinアプリを起動します。
次に、電話を操作し、Appiumの更新ボタンをクリックして要素の場所コードを取得します。
この方法では、Appiumが要素の位置をうまく取得できない場合があります。これは、Web側のiframeページと同じである可能性があります。
そのため、見つからない要素については、電話画面の場所を直接クリックします。
すべての携帯電話の画面はサイズが異なるため、このパラメーターは確実に変化します。そのため、欠点があり、普遍的に使用することはできません。
{写真を切り替えるには、左右にスワイプします}
一般的な操作は上記のとおりです。UPのメインページの画像がありませんので、ご自身で作成してください。Pythonコードは以下のとおりです。
import time import random from appium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from appium.webdriver.common.touch_action import TouchAction from selenium.webdriver.support import expected_conditions as EC def main (): #インポート驱πplaceserver = 'http:// localhost:4723 / wd / hub'desired_caps = { ' platformName ':' Android '、 ' deviceName ':' STF_AL00 '、 ' appPackage ':' com.ss。 android.ugc.aweme '、 ' appActivity ':' .main.MainActivity '、 #関闭手机软键盘 ' unicodeKeyboard ':True、 'resetKeyboard':True } driver = webdriver.Remote(server、desired_caps) wait = WebDriverWait(driver、60) #ユーザープライバシー契約に同意し、 button_1 = wait.until(EC.presence_of_element_located((By.ID、 'com.ss.android.ugc。 aweme:id / q6 '))) button_1.click() #電話の許可を禁止し、 button_2 = wait.until(EC.presence_of_element_located((By.ID、' com.android.packageinstaller:id / permit_deny_button '))) button_2をクリックします。 .click() #ロケーション権限を無効にし、 button_3 = wait.until(EC.presence_of_element_located((By.ID、 'com.android.packageinstaller:id / permit_deny_button'))) button_3.click() time.sleep(2)をクリックします。 #上にスワイプしてTikTokビデオ再生ページに入ります TouchAction(driver).press(x = 515、y = 1200).move_to(x = 515、y = 1000).release()。perform() #Douyinにはガイダンスがあるため、ここではより長い遅延を設定する必要があります操作とプロンプト、しばらく待つ必要があります time.sleep(20)#Douyin の「いいね」をクリックして、ログインインターフェイスに入る TouchAction(driver).press(x = 950、y = 800).release()。perform() #パスワードをクリックしてログインします button_4 = wait.until(EC.presence_of_element_located((By.ID、 'com.ss.android.ugc.aweme:id / afg'))) button_4.click() #アカウントを入力します button_5 = wait.until (EC.presence_of_element_located((By.ID、 'com.ss.android.ugc.aweme:id / ab _'))) button_5.send_keys( 'your account') #パスワードを入力 button_6 = wait.until(EC.presence_of_element_located ((By.ID、 'com.ss.android.ugc.aweme:id / aes'))) button_6.send_keys( 'あなたのパスワード') time.sleep(2) #アテンションバーを入力します、2番目の懸念事項をクリックします #飛び出すためソフトキーボードはログインボタンをブロックします 。TouchAction(driver).press(x = 980、y = 1850).release()をキャンセルするには、ソフトキーボードをクリックする必要があります。perform() time.sleep(2) #ログインボタンをクリックします button_7 = wait.until(EC.presence_of_element_located((By.ID、 'com.ss.android.ugc.aweme:id / abb'))) button_7.click() time。 sleep(2) #正常にログインし、 TikTokビデオインターフェイスに入り、「我」の下のタイトルバーをクリックしますTouchAction(driver).press(x = 990、y = 1850).release()。perform() #個人のホームページに入り、クリックします button_8 = wait.until(EC.presence_of_element_located((By.ID、 'com.ss.android.ugc.aweme:id / a_7'))) button_8.click()に従ってください button_9 = wait.until(EC.presence_of_element_located((By.XPATH、 '/ hierarchy / android.widget.FrameLayout / android.widget.LinearLayout / android.widget.FrameLayout / android.widget.RelativeLayout / android.widget.LinearLayout / android .widget.FrameLayout / android.view.ViewGroup / android.widget.LinearLayout / android.support.v7.widget.RecyclerView / android.widget.RelativeLayout [2] /android.widget.RelativeLayout [1] '))) button_9。 click() #UPのメインページに入り、最初のビデオをクリックします button_10 = wait.until(EC.presence_of_element_located((By.ID、 'com.ss.android.ugc.aweme:id / aqm'))) button_10.click () :間 、ページを一番下までし続けます。 #Trueのスクロール TouchAction(driver).press(x = 515、y = 1247).move_to(x = 515、y = 1026).release()。perform() time.sleep(float(random.randint(5、10))) if __name__ == ' __ main __ ': main()
ビデオコードをダウンロードするには、ビデオリンクの複製を解除する必要があります。
パラジウムとしてインポートパンダ インポート要求 インポートOS NUM = 0 DOM = [] folder_path = "F:/ビデオ/" os.makedirs(folder_path) DF = pd.read_csv( 'douyin.csv'、ヘッダ=なし、名前= [」 url "]) #リンクを 重複排除し、 df ['url'] [2:]にDouyin for iと入力して取得したビデオリンクを削除します: iがdomにない場合:dom.append(i)#jの ビデオ をダウンロードしますin dom: url = j num + = 1 response = requests.get(url、stream = True) filename = str(num)+ '。mp4' with open( 'F:\ video \' + filename、 'ab +') as f: f.write(response.content) f.flush() print(filename + 'download complete')
ついに若い女性のすべてのビデオを首尾よく入手しました...
もし私が工場にいたとしたら、その時にこのショーをするのはどれほど良いことでしょう、ハハ。
実際、ほとんどの女の子はDouyinを撃つのが好きだと思いますが、この種の操作をダウンロードするべきではありません。
それなら、弟たちが好きな女の子のビブラトビデオをダウンロードする機会がここにあります。
それから「MostBeautifulMoments」シリーズのビデオを編集しましたが、これはチャンスではありません...
/ 04 /まとめ
コードは「GitHub」にあります。https://github.com/Tobby-star/douyin
青いフォントをクリックして、30冊のギフト付き電子書籍を 受け取りましょう!