A Windows-based, local Chrome-controlled form auto-submission tool for automating inquiry form submissions with strict safety and compliance features.
- Automatic Form Detection: Intelligently finds and identifies inquiry/contact forms on websites
- Smart Form Filling: Automatically fills forms with predefined company data
- Multi-Step Support: Handles input → confirm → submit workflows
- NG Phrase Detection: Automatically skips sites with prohibited phrases (営業禁止, etc.)
- CAPTCHA Detection: Detects and skips sites with CAPTCHA (bypass NOT allowed)
- Duplicate Prevention: Optionally skips previously successful URLs
- Modern GUI: Clean, dark-mode interface built with CustomTkinter
- Real-Time Logging: Live execution log showing all actions and results
- Progress Tracking: Visual progress bar and statistics (success/failed/skipped)
- Configuration Modal: Easy-to-use settings configuration
- Message Editor: Full-featured editor for form data and message templates
- Left Sidebar: Quick access to all controls and file loading
- Strict Selection Rules: Only selects "その他" for inquiry type dropdowns
- Email-Only Contact: Never selects phone contact methods
- Legal Safety: Automatically skips sites with legal warning phrases
- No CAPTCHA Bypass: Detects but never attempts to bypass CAPTCHA
- Complete Audit Trail: All actions logged to CSV with timestamps
- Message Tag System: Use 【company】 tag for per-site customization
- Time Restrictions: Optional execution time windows (e.g., 9:00-18:00 only)
- Day Restrictions: Optional day-of-week restrictions (e.g., skip weekends)
- Direct Mode: Treat target URL as inquiry page directly (no auto-discovery)
- Headless Mode: Run Chrome in background without visible window
- Parallel Processing: Support for 1-8 parallel instances (default: 1)
- OS: Windows 10/11
- Browser: Google Chrome (latest stable)
- Python: 3.8 or higher
# Activate virtual environment (if not already activated)
.\.venv\Scripts\activate
# Install required packages
pip install -r requirements.txtMake sure Google Chrome is installed on your system. The tool will automatically download the appropriate ChromeDriver.
To create a standalone executable file (.exe) that can run without Python:
# Activate virtual environment
.\.venv\Scripts\activate
# Run build script
.\build_exe.batOr use the simple build script:
.\build_exe_simple.batThe EXE file will be created in the dist folder: dist\ListersForm.exe
Note:
- The EXE file runs in headless mode by default (Chrome window is not displayed)
- You can change this in the GUI settings after launching the EXE
- ChromeDriver will be automatically downloaded on first run, or you can place
chromedriver.exein the same folder as the EXE
For detailed instructions, see BUILD_EXE_GUIDE.md.
# From project directory
python main_gui.pyOr use the provided launcher:
.\start.bat-
Load Target CSV
- Click "Load CSV" in the sidebar
- Select your CSV file with target URLs
- Column A: Target URL (required)
- Column B: Optional per-site message (optional)
-
Configure Form Data
- Click "Edit Form Data & Message"
- Fill in company information (required fields marked with *)
- Edit the common message template
- Use 【company】 tag for dynamic replacement
- Click "Save"
-
Configure Settings (Optional)
- Click "Configuration"
- Set direct mode, headless mode, parallel count, etc.
- Configure time/day restrictions if needed
- Enable duplicate prevention if desired
- Click "Save"
-
Start Automation
- Click "Start" button
- Monitor progress in real-time log
- View statistics in sidebar
-
Control Execution
- Pause/Resume: Temporarily pause execution
- Stop: Stop after current site completes
-
Review Results
- Results automatically saved to CSV:
ツール実行結果_YYYYMMDDhhmmss.csv - Contains: Target URL, Result, Reason, Inquiry URL, Timestamp, Message Used
- Results automatically saved to CSV:
ListersForm supports two input formats for maximum flexibility:
Simple 2-column format:
https://example.com,株式会社Example
https://example2.com,
https://example3.com,エグザンプル商事Column A: Target URL (required) Column B: Custom company name (optional - replaces 【company】 tag)
Recommended for large-scale operations with per-company customization
| Column 1 | Column 2 | Column 3 | Column 4 | Column 5 |
|---|---|---|---|---|
| Inquiry URL (required) | Secondary URL (optional) | Company Name (optional) | Recipient Name (optional) | Custom Message (optional) |
Example CSV:
https://example.com/contact,,株式会社Example,山田太郎,貴社のサービスについてお問い合わせです。
https://example2.com/inquiry,https://example2.com/form,株式会社Example2,佐藤花子,製品に興味があります。
https://example3.com/contact,,,田中一郎,ご連絡差し上げました。For Excel files (.xlsx, .xls), you can add a second sheet with common form information:
| Key | Value |
|---|---|
| メールアドレス | info@example.com |
| 電話番号 | 03-1234-5678 |
| 部署 | 営業部 |
| 会社URL | https://www.example.com |
| 郵便番号 | 100-0001 |
| 都道府県 | 東京都 |
| 市区町村 | 千代田区 |
Data Priority:
- Company-specific data (Sheet 1, columns 3-5)
- Common data (Sheet 2, Excel only)
- GUI configured data
Supported File Types:
- CSV files (*.csv)
- Excel files (*.xlsx, *.xls)
See EXCEL_FORMAT_GUIDE.md for detailed format specification and examples.
The tool generates a timestamped CSV file with the following columns:
| Column | Description |
|---|---|
| Target URL | Original URL from input CSV |
| Result | Success / Failed / Skipped |
| Reason | Detailed reason for result |
| Inquiry URL | Actual inquiry page URL detected |
| Timestamp | Execution timestamp |
| Message Used | First 100 chars of submitted message |
- Enabled: Treats target URL as inquiry page directly (no auto-discovery)
- Disabled: Automatically searches for inquiry links on target page
- Enabled: Runs Chrome in background (no visible window)
- Disabled: Shows Chrome window during execution
- Range: 1-8 instances
- Default: 1 (recommended for safety)
- Note: Higher values increase speed but also CPU/memory usage
- Enabled: Skips URLs previously processed successfully
- Disabled: Processes all URLs regardless of history
- Set start and end times (e.g., 21:00-07:00)
- Tool pauses during restricted hours
- Select days to skip (e.g., Saturday, Sunday)
- Tool pauses on restricted days
The tool automatically detects and fills fields based on common patterns:
| Field Type | Detection Keywords |
|---|---|
| Company Name | 会社名, 企業名, company, organization |
| Department | 部署, 部門, department |
| Last Name | 姓, 名字, lastname |
| First Name | 名, firstname |
| メール, email, e-mail | |
| Phone | 電話, tel, phone |
| URL | url, ホームページ, website |
| Postal Code | 郵便番号, postal, zip |
| Prefecture | 都道府県, prefecture |
| City | 市区町村, city |
| Address | 住所, address |
| Subject | 件名, subject, title |
| Message | 本文, 内容, message, inquiry |
Inquiry Type Dropdown:
- ONLY selects "その他" (Other)
- If "その他" not found → SKIP SITE
Contact Method:
- Prefers: メール, メールで回答希望, メールで連絡希望
- NEVER selects telephone options
Source/Referral:
- Prefers: 検索エンジン, 検索, Google
Privacy Checkbox:
- Auto-checks checkboxes containing: 同意, プライバシー
The tool automatically skips sites containing these phrases:
- 営業禁止, 営業不可, 営業お断り
- 法的措置, 法的な処置, 法的手段, 法的対応
- 特定電子メール, 送信の適正化
- 広告宣伝, 一方的な営業, メールマガジン
- 営業行為, 売り込み, 売込み, 売りこみ, セールス
The tool provides explicit failure reasons:
| Reason | Description |
|---|---|
| Inquiry page not found | Could not locate inquiry/contact page |
| CAPTCHA detected | CAPTCHA present (bypass not allowed) |
| Validation error | Form validation failed |
| Character limit exceeded | Message too long for form |
| URL記載不可 | URL input rejected by site |
| Required dropdown missing その他 | Inquiry type dropdown lacks "その他" |
| Confirmation flow failed | Multi-step confirmation process failed |
| NG phrase detected | Site contains prohibited phrase |
| Duplicate URL | URL already processed successfully |
| Unknown error | Unexpected error occurred |
- Shows all actions and decisions in real-time
- Includes timestamps and detailed messages
- Can be cleared during execution
- Visual indicator of completion percentage
- Shows current/total count
- Success: Successfully submitted forms
- Failed: Failed submissions with reasons
- Skipped: Sites skipped due to NG phrases or duplicates
- listerform.log: Detailed application log
- Includes timestamps and error stack traces
- Useful for debugging
✅ Automates legitimate business inquiries ✅ Respects site restrictions and warnings ✅ Provides complete audit trail ✅ Skips sites that prohibit business contact ✅ Detects but never bypasses CAPTCHA
❌ Bypass CAPTCHA ❌ Ignore "no sales contact" warnings ❌ Force submissions on restricted sites ❌ Spoof browser fingerprints ❌ Send spam or unsolicited messages
- Use respectful, professional messages
- Only contact sites for legitimate business purposes
- Review NG phrase list and honor restrictions
- Monitor execution logs for any issues
- Manually review failed/skipped sites if needed
Problem: Chrome driver fails to start Solution:
- Update Chrome to latest version
- Delete
.wdmfolder in user directory - Reinstall with:
pip install --upgrade webdriver-manager
Problem: CSV with garbled characters Solution:
- Save CSV as UTF-8 (with BOM) in Excel
- Or use encoding: Shift-JIS or CP932
Problem: Inquiry form not found Solution:
- Enable Direct Mode and use inquiry URL directly
- Check if site uses non-standard form implementation
- Review logs for specific error messages
Problem: Many sites have CAPTCHA Solution:
- This is intentional - CAPTCHA bypass is not allowed
- These sites require manual submission
- Review output CSV for CAPTCHA sites list
Problem: Slow execution Solution:
- Enable Headless Mode for faster execution
- Reduce parallel count if system is overloaded
- Check network connection speed
Use 【company】 tag in your message template for dynamic replacement:
Template:
お世話になります。
【company】の山田と申します。
貴社のサービスに興味があり、ご連絡させていただきました。
With custom message (Column B = "株式会社Example"):
お世話になります。
株式会社Exampleの山田と申します。
貴社のサービスに興味があり、ご連絡させていただきました。
Without custom message (Column B empty):
お世話になります。
【company】の山田と申します。
貴社のサービスに興味があり、ご連絡させていただきました。
ListerForm/
├── main_gui.py # Main GUI application
├── automation_engine.py # Core automation logic
├── chrome_controller.py # Chrome/Selenium controller
├── form_detector.py # Form detection and interaction
├── csv_handler.py # CSV input/output handling
├── config.py # Configuration constants
├── requirements.txt # Python dependencies
├── README.md # This file
├── start.bat # Windows launcher script
├── sample_targets.csv # Sample input CSV
└── listerform.log # Application log file (created on run)
For issues or questions:
- Check the troubleshooting section
- Review log files for error messages
- Verify CSV format and encoding
- Check Chrome version compatibility
This tool is for legitimate business use only. Users are responsible for:
- Compliance with local laws and regulations
- Respecting website terms of service
- Ensuring messages are appropriate and non-spam
- Maintaining ethical business practices
This tool is provided as-is for legitimate business automation purposes. The developers are not responsible for:
- Misuse of the tool for spam or unsolicited messages
- Violations of website terms of service
- Legal consequences of improper use
- Any damages or issues arising from use
Always ensure your use complies with:
- Japan's Act on Regulation of Transmission of Specified Electronic Mail
- Website terms of service
- General business ethics and practices
- Complete form automation system
- Modern GUI with CustomTkinter
- NG phrase detection
- CAPTCHA detection (no bypass)
- CSV input/output
- Configuration system
- Message editor
- Real-time logging
- Progress tracking
- Time/day restrictions
- Duplicate prevention
Built with Python, Selenium, and CustomTkinter For Windows 10/11 | Local Execution | Chrome-Based