Wechat公式アカウントの記事の他のプラットフォームへの移行の自動化

1. 需要

WeChat公式アカウントの記事を別のプラットフォーム(以下、プラットフォームA)に公開する

2、アイデア

アイデア 1: 記事のリンクを開いた後、記事の内容をコピーし、プラットフォーム A のエディターに貼り付けます。

アイデア2:プラットフォームAの参照リンク機能を利用する。

今回は解決策2を採用します。

3. ツール

Python、uibot

4. 手順

1. 公式アカウントを入力して過去のニュースを表示します。

2. 右クリック - ソース コードを表示します (注: ソース コードはロードされたコンテンツ部分のみであり、後続のコンテンツは要件に従ってロードする必要があります。つまり、下にスクロールする必要があります) - ファイルを別のファイルとして保存します。

3. Python の bs4 モジュールを使用して必要なコンテンツを解析し、今回は各記事のリンク、タイトル、日付を抽出し、Excel ファイルに保存します。

4. データのクリーニング。抽出されたコンテンツと実際のニーズに応じて、今回は、最初にリンクの必要な部分を抽出します (つまり、末尾のコンテンツの一部はソース トラッキング コードなどであるため、末尾のあるコンテンツは通常どおり開くことができます)。 、これは削除できます); 2 つ目は、日付を YYYY-MM-DD 形式に変換するを削除することです

5. uibot を使用して操作を自動化します。Excel のコンテンツをループし、ページのタイトル、日付、参照機能に必要なリンクを入力します。

5.遭遇した問題と解決策

1. プラットフォーム A での日付入力はカレンダー コントロール (下図を参照) であり、一般的なテキスト ボックスの入力操作は実行できません。解決策は、js コードを実行することです。まず、インターネット上のいくつかの解決策は、最初に readonly 属性を削除してから日付ボックスに割り当てるというものですが、readonly 属性を削除するコード (注 1 を参照) でエラーが報告されることに気づき、次のことを試みます。日付を割り当てるコードを直接実行すると (注 2 を参照)、エラーも報告されますが、プラットフォーム A のカレンダー コントロールが必要な日付に配置されているため、例外が追加され、エラーは直接スキップされます自動化は手動操作に従って実行されます。(つまり、カレンダー コントロールのテキスト ボックスをクリックし、[OK] ボタンをクリックします。この時点で正しい日付が配置されているため、直接 [OK] をクリックできます。注 3 を参照)

Try
        // sRet = WebBrowser.RunJS(hWeb,'''document.getElementById("wzrq").removeAttribute("readonly");''',True,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200}) //注释1
        dateJs='document.getElementById("wzrq").value = ' & '"' & date & '"'
        sRet = WebBrowser.RunJS(hWeb,dateJs,True,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200}) //注释2
Catch e
    TracePrint ""
End Try
// 点击日期框--注释3
Mouse.Action({"html":[{"id":"wzrq","tag":"INPUT"}],"wnd":[{"app":"iexplore","cls":"IEFrame","title":"*"},{"cls":"Internet Explorer_Server"}]},"left","click",10000,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":True,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate","bMoveSmoothly":False})
// 点击日历控件的确定按钮--注释3
Mouse.Action({"html":[{"aaname":"确定","parentid":"layui-laydate1","tag":"SPAN"}],"wnd":[{"app":"iexplore","cls":"IEFrame","title":"*"},{"cls":"Internet Explorer_Server"}]},"left","click",10000,{"bContinueOnError":False,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":True,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate","bMoveSmoothly":False})

2. リンクを引用した後、ネットワークの問題によりリンクが正常に読み込まれない場合がありますが、このときに直接次のステップに進むと、記事の内容は空になります。この種の問題を解決するには、一方では、インポートされたリンクの後続の操作を遅らせて、読み込みに十分な時間を確保する (つまり、遅延を設定する) こと、他方では、主に次のことを行います。ページのソースコードが読み込まれているかどうかの判断など、読み込み前後の変更を確認します。一部の要素など。今回の変更を判断する考え方は、エディターの文字数プロンプト(下の図を参照)を使用し、位置決め + スクリーンショット + 画像認識の方法を採用することです。リンクが正常に読み込まれない場合は、 「0単語と0画像が入力されており、0分で読み取れると予想されます」と認識されますが、読み込みが成功すると結果は異なります。文章の特性(X単語X画像X分)に応じて、正規表現を使用して数値を抽出します (この抽出の結果は配列です)。配列 [0,0,0] を比較します。それらが等しい場合、ロードは成功しません。等しくない場合は、サイクルでリロードします。等しい場合、ロードは成功します。注: この特定のシナリオでは、まず、リンクをロードする前に元のエディターのコンテンツをクリアし (エディターが提供するクリア機能)、コンテンツが存在しないことを確認しました (つまり、「0 個の単語と 0 個の画像が入力されている」 , そしてそれは0分間の読み取りが期待されています」), 2つ目は、uibotの配列が等しいかどうかを判断する機能が見つからず、カスタムPythonプラグイン機能によって実現されています。

 

おすすめ

転載: blog.csdn.net/m0_49621298/article/details/109560949