无需Selenium或Webdriver,如何向textdoc.co文本框写入内容?
解决textdoc.co无驱动写入文本框的问题
你的POST请求失败大概率是因为缺少必要的请求头、CSRF验证,或者提交目标地址不对。以下是修正后的可行方案:
关键问题分析
- 网站会验证请求合法性,比如检查
User-Agent识别请求来源,无此头会直接被拦截 - 多数网站需要CSRF令牌防止跨站提交,必须先从页面中获取该令牌再发起提交
- 提交的目标URL可能不是页面本身,而是页面内表单指定的action地址
修正后的代码实现
import requests from bs4 import BeautifulSoup # 替换为你的目标文档URL doc_url = 'https://textdoc.co/your-doc-id' session = requests.Session() # 使用会话保持Cookie,维持请求上下文 # 第一步:获取页面,提取CSRF令牌和必要Cookie headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = session.get(doc_url, headers=headers) if response.status_code != 200: print('无法获取目标页面') exit() soup = BeautifulSoup(response.text, 'html.parser') # 提取CSRF令牌(根据页面实际表单字段调整,可能是name="csrf-token"或其他) csrf_token = soup.find('meta', {'name': 'csrf-token'})['content'] if soup.find('meta', {'name': 'csrf-token'}) else None # 找到表单的提交action(如果表单有指定的话) form = soup.find('form') post_url = form['action'] if form and form.get('action') else doc_url # 第二步:构造提交数据 payload = { 'txt-doc': 'Hello World', '_token': csrf_token # 替换为页面实际的CSRF字段名,可能是_token或csrf_token } # 第三步:发送POST请求 post_headers = headers.copy() post_headers['Referer'] = doc_url post_headers['X-CSRF-TOKEN'] = csrf_token # 部分网站需要在请求头同时携带CSRF response = session.post(post_url, data=payload, headers=post_headers) # 验证写入结果 if response.status_code == 200: # 重新获取页面检查内容是否更新 check_response = session.get(doc_url, headers=headers) check_soup = BeautifulSoup(check_response.text, 'html.parser') textarea = check_soup.find('textarea', {'id': 'txt-doc'}) if textarea and textarea.text.strip() == 'Hello World': print('文本写入成功') else: print('文本未成功写入,可能字段名或提交地址有误') else: print(f'请求失败,状态码:{response.status_code}')
额外注意事项
- 页面的CSRF字段名可能不是
_token,需要查看页面源码确认(比如查看表单内的隐藏输入字段) - 如果网站有更严格的反爬机制,可添加
Accept-Language等额外请求头模拟真实浏览器 - 确保你访问的文档处于可编辑状态,部分私有文档需要权限验证
内容的提问来源于stack exchange,提问作者Samuel
相关产品推荐
相关产品推荐

