本站点主要记录在日常工作开发中的问题以及功能实现
WhatsApp作为全球月活超20亿的通讯工具,已成为外贸人开发客户的“黄金渠道”。然而,许多新手在注册时卡在验证码环节,养号稍有不慎就被封禁,更因缺乏高效获客方法而错失订单。本文将从注册、养号、防封以及获客这四个方面,助你规避风险、提升效率。建议收藏!如何注册WhatsApp账号?1.下载安装iOS端:打开App Store,搜索“WhatsApp”,找到官方应用后点击“获取”进行下载。下载完成后,打开应用,系统会自动引导你进入注册流程。Android端:打开Google Play商店,搜索“WhatsApp”,点击“安装”按钮进行下载。下载完成后,打开应用,按照提示进入注册页面。PC端:WhatsApp目前不支持直接在PC端注册账号。你需要先在手机端完成注册,然后通过扫描二维码将WhatsApp同步到PC端。访问WhatsApp Web,使用手机端的WhatsApp扫描二维码即可完成同步。2.手机号验证WhatsApp账号注册需要绑定一个手机号码,建议使用支持国际短信的实体SIM卡(推荐Google Voice、海外本地号码),输入“+国家代码+手机号”。通过短信注册:打开What
点击查看 2025 年出海热度一点没减,做跨境电商的、运营海外社媒的、投跨境广告的团队越来越多。但老问题还是绕不开 —— 账号风控。轻则功能被限,比如店铺没法上新、广告不能投放;重则直接封号,之前搭的运营框架、攒的用户粉丝全白费,甚至影响品牌在海外的口碑。想少踩这个坑,选对工具、用对方法是关键。像我们圈子里很多人都在用的AdsPower 指纹浏览器,就是专门解决出海多账号风控的,用着确实省心。一、出海账号风控核心痛点:为啥你家账号总出问题?不管是做亚马逊、Facebook,还是 TikTok、Google Ads,账号被风控,多半跑不出 “账号关联”“环境不稳”“操作不当” 这三个原因,都是我们日常运营里常碰到的坑:账号关联没躲掉:几个账号共用一个 IP,或者在同一台电脑上用同一个浏览器登,平台一查就知道是 “一人多开”,直接触发风控;登录环境不靠谱:浏览器版本乱选,比如亚马逊要 Chrome 120 以上,偏用个旧版本;IP 一会儿切美国、一会儿切日本,或者用的 IP 被平台标记过;Cookie 没保存好,每次登都像新设备,平台自然觉得可疑;手动操作太费劲:管十几个账号就手忙
在使用 playwright 自动化抓取天眼查数据的时候会触发验证码,此时可以通过云码的验证码接口进行处理,准确率还是挺高的。代码示例如下:在点选的时候不要太快,这里设置了每次点击一下停留一两秒。
在公司业务中使用到 playwright 来进行浏览器自动化处理,通过 pyinstaller 打包项目并运行打包之后的程序时会提示:出现这种原因是因为 pyinstaller 在打包程序的时候没有将浏览器也一同打包进去。首先需要查找到 playwright 将浏览安装到了哪里,执行以下指令:playwright install --dry-run根据自己使用的浏览器选择,这里使用的是 chromium。将 chromium-1155 复制到 /playwright/driver/package/.local-browsers 目录下,如下图:
pyenv 能够方便地切换 Python 版本,并且可以安装多个 Python 版本,方便开发。链接pyenv-win 下载windows 安装教程python 镜像linux 安装教程安装windows下载 py-env,之后配置环境变量,将 pyenv-win/pyenv-win/bin 目录添加至环境变量基本命令查看 Pyenv 版本pyenv --version查看当前 Python 版本当前生效的 Python 版本,它会综合考虑 全局版本、本地版本 和 Shell 版本 的优先级,最终确定当前使用的版本。pyenv version查看所有 Python 版本pyenv versions安装 Python 版本pyenv install 3.9.6本地 Python 版本操作本地版本仅对 当前目录及其子目录 生效。查看本地 Python 版本pyenv local切换本地 Python 版本pyenv local <version>全局 Python 版本操作全局版本对 整个系统 生效,即对所有未设置本地版本的目录都有效。查看全局 Python 版本pyenv g
在 vue-router@4 版本中取消了 router.addRoutes() 方法,改用 router.addRoute() 方法,来动态添加路由。空白页问题为什么会出现空白页?那是因为在路由跳转的时候,路由可能还没有被加载,此时就会出现进入到空白页。所以需要通过 next({...to, replace: true}) 来进行一个重定向,将当前路由替换成新的路由。但是,这种方式仅限于常量路由中没有全局404页面,如果常量路由中有全局404页面,那么在路由加载的时候,就会跳转到404页面。如下:const constantRoutes = [ { path: '/', name: 'Home', component: () => import('@/views/Home.vue'), }, { path: '/login', name: 'Login', component: () => import('@/views/Login.vue'),
方式一:在使用 vue3+typescript 添加路由引入路径的时候报错:在 vite-env.d.ts 中添加:declare module "*.vue" { import { DefineComponent } from "vue"; const component: DefineComponent<{}, {}, any>; export default component; }通过以上方式可以取消报错爆红,但是当点击路径的时候跳转地址不正确。方式二:在 tsconfig.jsdon 中添加配置:"compilerOptions": { "baseUrl": "./", "paths": { "@/*": ["./src/*"] } }
在 .ts 文件上引入 path 模块的时候报错:import { resolve } from 'path'主要原因是 path 是一个 node.js 模块,node.js 本身不支持 typescript,为了解决这个问题需要安装一个 @types/node。npm install @types/node -D在引入文件的时候,如 "@/user" 按理我们需要引入 user 目录中的 index.ts 文件,但是在使用 TypeScript 时通常需要使用模块路径别名(Module Path Aliases)来简化文件引入的路径。// tsconfig.json { ..., "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] }
错误描述当运行 Python 3 时遇到以下错误:python3: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory这个错误表明系统找不到 libpython3.6m.so.1.0 这个共享库文件。原因分析缺少 libpython3.6m.so.1.0 的原因可能有以下几种:未安装 Python 3.6 的开发包:libpython3.6m.so.1.0 是 Python 3.6 的共享库文件,通常包含在 Python 3.6 的开发包中。如果没有安装 Python 3.6 的开发包(例如 python36-devel),系统中就不会有这个文件。手动编译 Python 3.6 时未启用共享库:如果手动编译了 Python 3.6,但没有使用 --enable-shared 选项,编译过程不会生成共享库文件。系统路径配置问题:即使安装了共享库文件,如果系统路径配置不正确,系统也可能找不到这个文件。例如,L
缺少 psutil 模块解决方式,安装 psutil 模块pip install psutil原因:项目依赖:在自身的项目中没有直接使用到 psutil 模块的情况下,可能是因为项目依赖的其他库或模块需要 psutil 作为依赖项。例如,某些监控、性能分析或系统管理工具可能会依赖 psutil 来获取系统信息。环境配置问题:可能是由于环境配置不完整或不一致导致的。例如,在不同的开发环境或生产环境中,某些依赖项可能没有正确安装或版本不匹配。依赖冲突:在某些情况下,不同的库可能依赖于不同版本的 psutil,导致在安装或运行时出现冲突。手动删除或误操作:有时,psutil 模块可能被手动删除或误操作导致缺失。虚拟环境问题:如果在使用虚拟环境,可能是因为虚拟环境中没有正确安装 psutil 模块,或者在激活虚拟环境时没有正确加载依赖项。
根据提示可以看出需要提供一个id。文档:https://element-plus.org/zh-CN/guide/ssr.html#%E6%8F%90%E4%BE%9B%E4%B8%80%E4%B8%AAid代码:// plugins/ElementPlus.ts import { defineNuxtPlugin } from '#app' import ElementPlus, { ID_INJECTION_KEY } from 'element-plus' import 'element-plus/dist/index.css' export default defineNuxtPlugin(nuxtApp => { nuxtApp.vueApp.provide(ID_INJECTION_KEY, { prefix: 1024, current: 0 }) nuxtApp.vueApp.use(ElementPlus) })
需要配置配置 ZIndex使用SSR进行开发时,会遇到 z-index 引起的水合错误。 在这种情况下,建议注入一个初始值以避免这种错误。文档:https://element-plus.org/zh-CN/guide/ssr.html#%E9%85%8D%E7%BD%AE-zindex代码:// plugins/ElementPlus.ts import { defineNuxtPlugin } from '#app' import ElementPlus, { ZINDEX_INJECTION_KEY } from 'element-plus' import 'element-plus/dist/index.css' export default defineNuxtPlugin(nuxtApp => { nuxtApp.vueApp.provide(ZINDEX_INJECTION_KEY, { current: 0 }) nuxtApp.vueApp.use(ElementPlus) })
介绍ua-parser-js 是一个轻量级的 JavaScript 库,用于解析用户代理字符串,以获取有关用户的操作系统、浏览器类型、版本、设备类型等信息。GitHub文档使用npm 下载npm install ua-parser-js引入import UAParser from 'ua-parser-js'; const parser = new UAParser('[user-agent]'); // 如果不填写会自动获取当前页面上的ua const result = parser.getResult(); console.log(result);返回结果{ ua: "", browser: { name: "", version: "", major: "", type: "" }, engine: { name: "", ver
from openai import OpenAI def client_chat(): client = OpenAI(api_key=os.getenv("API_KEY"), base_url="https://xx.xx.xx") response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "You are a helpful assistant"}, {"role": "user", "content": "Hello"}, ], stream=True )
textarea 在开发中常常被使用到,但默认的 textarea 效果并不能满足我们的需求,比如信息发送框,如果直接使用 input 的话,在长文本内容中会显得十分拥挤,如果直接使用 textarea 则在未填充内容时显得过于空旷,因此我们需要自定义 textarea 的样式,使其在未填充内容时也能保持一定的宽度,同时也能在长文本内容中自动换行并调整高度。效果如下:这里主要通过监听 textarea 的 input 事件,从而获取 textarea 的内容区域高度,从而调整 textarea 的高度,实现文本内容超出宽度时高度调整的效果。代码示例:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <t
将 monaco-editor 下载到本地,地址:https://microsoft.github.io/monaco-editor/目录结构:代码示例:<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="./monaco-editor-0.50.0/package/min/vs/editor/editor.main.css"> </head> <body> <div id=&quo
"urllib3 v2.0 only supports OpenSSL 1.1.1+, currently "ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.0.2k-fips 26 Jan 2017'. See: https://github.com/urllib3/urllib3/issues/2168requests 指定安装版本pip install requests==2.6
介绍Shadow DOM 是 Web 组件规范的一部分,它允许将封装的“影子” DOM 树附加到常规 DOM 树中的元素。影子 DOM 封装了 DOM 和样式,使开发人员可以控制这些元素,而不会与页面上的其他代码或样式发生冲突。术语影子宿主(Shadow host):影子 DOM 附加到的常规 DOM 节点。影子树(Shadow tree):影子 DOM 内部的 DOM 树。影子边界(Shadow boundary):影子 DOM 终止,常规 DOM 开始的地方。影子根(Shadow root):影子树的根节点。创建 Shadow DOMconst host = document.querySelector('#host') // 创建一个 Shandow DOM 元素 const shadow = host.attachShadow({mode: 'open'}) const span = document.createElement('span') span.textContent = 'Hello World' // 向 Shadow DOM 元素内填充内容 shadow.a
在做JS逆向时常常会遇到需要模拟浏览器环境的情况,比如需要获取浏览器的location、document对象等。当然,如果只是类似获取 location 对象中的某个值的话,我们可以直接在浏览器端将参数值都复制过来。但是,如果需要对 document 进行操作那么就无能为力了,此时就需要使用到一个 NodeJS 包:jsdom。jsdom 是一个 NodeJS 包,它可以在 NodeJS 环境中模拟浏览器环境,包括创建一个 window 对象、document 对象等。使用 jsdom 包,我们可以创建一个虚拟的浏览器环境,然后在该环境中执行 JS 代码,从而实现对 document 对象的操作。安装npm install jsdom使用 const { JSDOM } = require('jsdom'); const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>'); const window = dom.window;
execjs 能够让你在 Python 环境中运行 JavaScript 代码。它提供了一个接口,可以使用各种 JavaScript 运行时引擎来执行 JavaScript 代码,包括 NodeJS、PhantomJS、PyV8等。安装pip install PyExecJS运行 js 代码import execjs # js 代码 js_code = """ function add(x, y) { return x + y; } """ # 创建一个 JavaScript 运行环境 ctx = execjs.compile(js_code) # 在 JavaScript 运行环境中调用 JavaScript 函数 result = ctx.call("add", 3, 5) # JavaScript 代码返回参数 print(result) # 输出:8call 方法:第一个参数为需要调用的 JavaScript 函数名后续参数为函数的传参切换运行环境import execjs #
@echo off REM 指定要使用的 Python 解释器路径 set "PYTHON_EXE=.\venv\Scripts\python.exe" REM 使用指定路径的 Python 解释器执行脚本 "%PYTHON_EXE%" main.py pause
import random user_agent = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60", "Opera/8.0 (Windows NT 5.1; U; en)", "Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50", "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.1
有时在 .ts 文件中需要通过 import config from 'config.json' 方式来导入写在 json 中的配置信息。我们需要在 tsconfig.json 文件中开启一下配置:{ "compilerOptions": { "resolveJsonModule": true } }
使用 pinia 时遇到的报错问题:“getActivePinia was called with no active Pinia. Did you forget to install pinia?“,此错误通常是在没有注册pinia时就使用了pinia时产生的报错信息可能你会觉得我已经在 main.ts 中注入了 pinia 了啊?怎么还是报错呢?这可能是你在使用 pinia 时不规范,如下面代码:// src/hooks/useUser.ts import { useUserStore } from '@/store' const user = useUserStore() export function useUser() { const userName = user.name return {} }有经验的同学可能已经注意到了上面代码的问题所在,这里在 pinia 没有注册的时候就直接 const user = useUserStore() 了,这显然是不对的。正确的做法是:// src/hooks/useUser.ts import { useUserSt
a
不过是些许风霜罢了