增加CICD
This commit is contained in:
58
.gitea/workflows/cd.yaml
Normal file
58
.gitea/workflows/cd.yaml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
name: Update Code
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
env:
|
||||||
|
DESTINATION: C:\Facebook
|
||||||
|
REPOSITORY_URL: http://deploy:123qwe123@123.58.209.87:3000/py_facebook/py_facebook.git
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
CD:
|
||||||
|
runs-on: ${{ matrix.machine }}
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: powershell
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
machine:
|
||||||
|
- windows-101.36.102.136
|
||||||
|
steps:
|
||||||
|
- name: 更新或clone项目
|
||||||
|
shell: powershell
|
||||||
|
run: |
|
||||||
|
if (-not (Test-Path -Path $env:DESTINATION\.git)) {
|
||||||
|
# 目录不存在,执行 git clone
|
||||||
|
git clone $env:REPOSITORY_URL $env:DESTINATION
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
# 目录存在,执行 git pull
|
||||||
|
Set-Location $env:DESTINATION
|
||||||
|
git pull
|
||||||
|
}
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v3
|
||||||
|
with:
|
||||||
|
python-version: "3.10"
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
Set-Location $env:DESTINATION
|
||||||
|
"${{ matrix.machine }}" | Set-Content -Path "ip.txt" -Encoding UTF8
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
python -m playwright install
|
||||||
|
python -m playwright install-deps
|
||||||
|
# python -m playwright install msedge
|
||||||
|
- name: Stop previous service
|
||||||
|
run: |
|
||||||
|
try {
|
||||||
|
Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue
|
||||||
|
} catch {}
|
||||||
|
- name: PIP LIST
|
||||||
|
run: pip list
|
||||||
|
- name: Start FastAPI server
|
||||||
|
timeout-minutes: 3 # 设定超时时间为 3 分钟
|
||||||
|
run: |
|
||||||
|
Set-Location $env:DESTINATION
|
||||||
|
Start-Process -WindowStyle hidden -FilePath python .\main.py
|
||||||
2
const.py
2
const.py
@@ -19,7 +19,7 @@ ELEMENT = {
|
|||||||
ENDPOINT = "154.19.186.49"
|
ENDPOINT = "154.19.186.49"
|
||||||
ACCESS_KEY = '3QcjsqdCYCoy1khuDqia'
|
ACCESS_KEY = '3QcjsqdCYCoy1khuDqia'
|
||||||
SECRET_KEY = 'iPXte32y1deoySiDq0RwONUJIiIgvjTVhbfCL8tV'
|
SECRET_KEY = 'iPXte32y1deoySiDq0RwONUJIiIgvjTVhbfCL8tV'
|
||||||
BUCKET = 'test'
|
BUCKET = 'facebook'
|
||||||
|
|
||||||
# DOVE PROXY
|
# DOVE PROXY
|
||||||
DOVE_USER = 'fetdog'
|
DOVE_USER = 'fetdog'
|
||||||
|
|||||||
2
main.py
2
main.py
@@ -12,7 +12,7 @@ TASK_TYPE = {
|
|||||||
'login_account': playwright_login
|
'login_account': playwright_login
|
||||||
}
|
}
|
||||||
|
|
||||||
HOST = "http://192.168.1.69:8001"
|
HOST = "http://118.193.40.152:8002"
|
||||||
|
|
||||||
|
|
||||||
def get_task():
|
def get_task():
|
||||||
|
|||||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
110
spider/task.py
110
spider/task.py
@@ -1,19 +1,24 @@
|
|||||||
import io
|
import io
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
import json
|
|
||||||
import random
|
|
||||||
import requests
|
|
||||||
import threading
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
import pyotp
|
import pyotp
|
||||||
from const import MIMETYPE, BUCKET, PIC_TYPE, BASE_PATH, api_url
|
import pywintypes
|
||||||
from miniofile import client, put_object
|
import requests
|
||||||
from exceptions import AuthException, OperationFailed
|
import win32api
|
||||||
from playwright.sync_api import sync_playwright, Error, TimeoutError
|
import win32con
|
||||||
from PIL import ImageGrab
|
from PIL import ImageGrab
|
||||||
from lxml import html
|
from playwright.sync_api import sync_playwright, Error, TimeoutError
|
||||||
|
|
||||||
|
from const import BUCKET, BASE_PATH
|
||||||
|
from exceptions import AuthException, OperationFailed
|
||||||
|
from logger import error_logger
|
||||||
|
from miniofile import client, put_object
|
||||||
|
|
||||||
|
|
||||||
# def get_dtsg_token(cookies):
|
# def get_dtsg_token(cookies):
|
||||||
@@ -720,10 +725,6 @@ def _full_screenshot():
|
|||||||
def update_windows_distinguish(x=1920, y=1080):
|
def update_windows_distinguish(x=1920, y=1080):
|
||||||
"""更改windows分辨率"""
|
"""更改windows分辨率"""
|
||||||
if sys.platform == "win32":
|
if sys.platform == "win32":
|
||||||
import win32api
|
|
||||||
import win32con
|
|
||||||
import pywintypes
|
|
||||||
|
|
||||||
devmode = pywintypes.DEVMODEType()
|
devmode = pywintypes.DEVMODEType()
|
||||||
|
|
||||||
# screenSize = [1280,800]
|
# screenSize = [1280,800]
|
||||||
@@ -782,40 +783,45 @@ def parse_cookies(cookies):
|
|||||||
|
|
||||||
|
|
||||||
def check_account_status(page, cookies):
|
def check_account_status(page, cookies):
|
||||||
|
# 检查是否失效
|
||||||
|
error_logger.info(f"page Title == {page.title()}")
|
||||||
|
if page.title() != "Facebook":
|
||||||
|
raise AuthException('该账号状态已失效', 'invalid')
|
||||||
|
|
||||||
|
# 检查是否冻结
|
||||||
|
headers = {
|
||||||
|
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||||
|
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
||||||
|
'cache-control': 'max-age=0',
|
||||||
|
'dpr': '2',
|
||||||
|
'priority': 'u=0, i',
|
||||||
|
'referer': 'https://www.facebook.com/',
|
||||||
|
'sec-ch-prefers-color-scheme': 'light',
|
||||||
|
'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"',
|
||||||
|
'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"',
|
||||||
|
'sec-ch-ua-mobile': '?0',
|
||||||
|
'sec-ch-ua-model': '""',
|
||||||
|
'sec-ch-ua-platform': '"macOS"',
|
||||||
|
'sec-ch-ua-platform-version': '"15.3.2"',
|
||||||
|
'sec-fetch-dest': 'document',
|
||||||
|
'sec-fetch-mode': 'navigate',
|
||||||
|
'sec-fetch-site': 'same-origin',
|
||||||
|
'sec-fetch-user': '?1',
|
||||||
|
'upgrade-insecure-requests': '1',
|
||||||
|
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
|
||||||
|
'viewport-width': '743',
|
||||||
|
}
|
||||||
|
cookies = {i['name']: i['value'] for i in cookies}
|
||||||
|
uid = cookies['c_user']
|
||||||
|
url = f"https://graph.facebook.com/{uid}/picture?type=normal"
|
||||||
|
response = requests.get(url, headers=headers, allow_redirects=False)
|
||||||
|
if response.status_code == 302:
|
||||||
|
if response.headers.get('Location') == 'https://static.xx.fbcdn.net/rsrc.php/v1/yh/r/C5yt7Cqf3zU.jpg':
|
||||||
|
raise AuthException('该账号已被冻结', 'frozen')
|
||||||
try:
|
try:
|
||||||
_change_language(page)
|
_change_language(page)
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
headers = {
|
raise OperationFailed('操作超时或该账户异常,请重试')
|
||||||
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
|
||||||
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
|
|
||||||
'cache-control': 'max-age=0',
|
|
||||||
'dpr': '2',
|
|
||||||
'priority': 'u=0, i',
|
|
||||||
'referer': 'https://www.facebook.com/',
|
|
||||||
'sec-ch-prefers-color-scheme': 'light',
|
|
||||||
'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"',
|
|
||||||
'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"',
|
|
||||||
'sec-ch-ua-mobile': '?0',
|
|
||||||
'sec-ch-ua-model': '""',
|
|
||||||
'sec-ch-ua-platform': '"macOS"',
|
|
||||||
'sec-ch-ua-platform-version': '"15.3.2"',
|
|
||||||
'sec-fetch-dest': 'document',
|
|
||||||
'sec-fetch-mode': 'navigate',
|
|
||||||
'sec-fetch-site': 'same-origin',
|
|
||||||
'sec-fetch-user': '?1',
|
|
||||||
'upgrade-insecure-requests': '1',
|
|
||||||
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
|
|
||||||
'viewport-width': '743',
|
|
||||||
}
|
|
||||||
cookies = {i['name']: i['value'] for i in cookies}
|
|
||||||
uid = cookies['c_user']
|
|
||||||
url = f"https://graph.facebook.com/{uid}/picture?type=normal"
|
|
||||||
response = requests.get(url, headers=headers, allow_redirects=False)
|
|
||||||
if response.status_code == 302:
|
|
||||||
if response.headers.get('Location') == 'https://static.xx.fbcdn.net/rsrc.php/v1/yh/r/C5yt7Cqf3zU.jpg':
|
|
||||||
raise AuthException('该账号已被冻结', 'frozen')
|
|
||||||
else:
|
|
||||||
raise OperationFailed('操作超时或该账户异常,请重试')
|
|
||||||
|
|
||||||
|
|
||||||
class RLock(threading._RLock):
|
class RLock(threading._RLock):
|
||||||
@@ -1120,9 +1126,7 @@ def playwright_check_account_cookies(cookies):
|
|||||||
page = context.new_page()
|
page = context.new_page()
|
||||||
url = 'https://www.facebook.com'
|
url = 'https://www.facebook.com'
|
||||||
page.goto(url)
|
page.goto(url)
|
||||||
time.sleep(1)
|
time.sleep(3)
|
||||||
page.goto(url)
|
|
||||||
time.sleep(10)
|
|
||||||
check_account_status(page, parse_cookies(cookies))
|
check_account_status(page, parse_cookies(cookies))
|
||||||
context.close()
|
context.close()
|
||||||
browser.close()
|
browser.close()
|
||||||
@@ -1254,8 +1258,8 @@ if __name__ == '__main__':
|
|||||||
# # lastname='Keals',
|
# # lastname='Keals',
|
||||||
# # image_key='rg.jpg'
|
# # image_key='rg.jpg'
|
||||||
# )
|
# )
|
||||||
# cookies = '{"datr": "AywLaEqnpuloEMFZFDsT2M_n", "sb": "AywLaHIpk4AHGJP1Fd9c9QFY", "locale": "en_US", "wd": "1920x945", "c_user": "61575694132528", "fr": "0uwYJ79B5B5QtHQlb.AWfITZg5T5P_nadNOxtrCjnArAa3M3q_nhI96McABALXYwpB55A.BoCywD..AAA.0.0.BoCywS.AWdWYvZYad3s8s25sh3-a_oZsxU", "xs": "12%3AJmqcjLatZzjPoQ%3A2%3A1745562643%3A-1%3A-1"}'
|
cookies = '{"c_user":"61565823476070","datr":"q13hZowje6bbViFxECQpYyp8","fr":"01C6Lt4VArm5hELvx.AWXg75HOo-QNJgbiDl8qFtw_5lc.Bm4V2r..AAA.0.0.Bm4V25.AWWHzUeMTuI","m_pixel_ratio":"1.875","sb":"q13hZgJARsRIDmNJG8xUauAe","wd":"384x686","xs":"50%3A8luhgQ-Ea0vnhg%3A2%3A1726045627%3A-1%3A-1"}'
|
||||||
# playwright_check_account_cookies(cookies)
|
playwright_check_account_cookies(cookies)
|
||||||
cookies = playwright_login('61575694132528', '@Badhon@20', 'LK3UVPADNOEGWIWPBAWWVGDPCMJOZN7M')
|
# cookies = playwright_login('61575694132528', '@Badhon@20', 'LK3UVPADNOEGWIWPBAWWVGDPCMJOZN7M')
|
||||||
print(cookies)
|
# print(cookies)
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user