真正有效的Python自动化依赖对subprocess、requests、pyautogui、selenium等模块底层行为的理解,而非编号教程;需掌握os.system阻塞问题、requests反爬 headers 设置、pyautogui坐标系适配等实战细节。

subprocess 怎么避免僵尸进程、selenium 如何绕过 Cloudflare 检测、schedule 与 APScheduler 的触发时机差异)。
如果你遇到的是以下某类真实问题,才值得深入:
为什么 os.system() 执行后脚本就卡住,不继续往下走?
因为 os.system() 是同步阻塞调用,会等待子进程完全退出才返回。在自动化流程中容易造成假死。
- 改用
subprocess.run()并显式设置timeout参数防无限等待 - 若需后台持续运行(如启动服务),用
subprocess.Popen()+start_new_session=True脱离父进程控制 - 注意 Windows 下
shell=True可能引入 cmd.exe 解析歧义,Linux 下则可能触发 sh -c 安全隐患
requests 抓取页面总是返回 403 或空内容?
多数自动化爬虫失败不是代码写错,而是服务端识别出非浏览器流量并拦截。
- 必须设置
headers,至少包含User-Agent和Accept,否则多数站点直接拒收 - 有些站点校验
Sec-Fetch-*等现代请求头,requests默认不发,需手动补全 - 返回 200 但内容为空?检查是否被重定向到登录页,用
response.history查看跳转链
用 pyautogui 模拟点击,为什么总点歪或没反应?
根本原因在于坐标系错位:屏幕缩放、多显示器、DPI 感知、窗口焦点丢失都会让 pyautogui.position() 返回值失效。
- 运行前确认系统缩放为 100%(Windows 设置 → 显示 → 缩放与布局)
- 不要依赖绝对坐标,改用
pyautogui.locateOnScreen()找图定位,配合confidence=0.8提高鲁棒性 - 每次操作前加
pyautogui.PAUSE = 0.1,避免鼠标移动过快导致目标未渲染完成
subprocess、requests、pyautogui、selenium 这些模块底层行为的理解——比如 subprocess 的 stdin/stdout 缓冲机制、requests.Session() 的 cookie 复用逻辑、selenium 的 WebDriverWait 与隐式等待冲突问题。
这些细节,不会出现在任何编号教程里。










