# coding: utf-8 import base64 import binascii import datetime import hashlib import ipaddress import logging import os import random import re import socket import string import subprocess import sys import urllib from collections import OrderedDict from urllib.parse import urlparse, urlunparse # 上面是标准库,下面是第三方库库 import socks # python3.8 -m pip install PySocks from bs4 import BeautifulSoup def choose_from_list(items): """ 返回一个选中的list。 """ while True: try: print("Available options:") for index, item in enumerate(items): print(f"{index} {item}") print(f"{len(items)} all") user_input = input("Choose your item(s) with index (comma-separated for multiple):\n") if user_input.lower() == 'all': return items selected_indices = [int(index.strip()) for index in user_input.split(',') if index.strip().isdigit()] if all(0 <= index < len(items) for index in selected_indices): return [items[index] for index in selected_indices] else: print("Invalid index number. Please try again.") except EOFError: sys.exit(0) except KeyboardInterrupt: sys.exit(0) except ValueError: print("Invalid input. Please enter valid index number(s).") def choose_from_iterable(iterable): """ 返回一个选中的list。 """ ordered_iterable = iterable # 如果输入是字典,则转换为有序字典 if isinstance(iterable, dict): ordered_iterable = OrderedDict(iterable) while True: try: print("Available options:") for index, item in enumerate(ordered_iterable): print(f"{index} {item}") print(f"{len(ordered_iterable)} all") user_input = input("Choose your item(s) with index (comma-separated for multiple):\n") if user_input.lower() == 'all': return list(ordered_iterable.values()) selected_indices = [int(index.strip()) for index in user_input.split(',') if index.strip().isdigit()] if all(0 <= index < len(ordered_iterable) for index in selected_indices): selected_items = [list(ordered_iterable.values())[index] for index in selected_indices] return selected_items else: print("Invalid index number. Please try again.") except EOFError: sys.exit(0) except KeyboardInterrupt: sys.exit(0) except ValueError: print("Invalid input. Please enter valid index number(s).") def get_file_content(file_path): encodings = ["utf-8", "gbk"] for encoding in encodings: try: with open(file_path, "r", encoding=encoding) as fp: return fp.read() except: continue return None def get_full_path(path): if path.startswith("~"): path = os.path.expanduser(path) if path.startswith("./") or path.startswith(".\\"): path = os.path.abspath(path) return path def clean_list(lines, spliter=None, do_strip=True, remove_empty=True): """ 如果有分割符,会对每行再进行分割 默认对每个元素进行strip 默认删除空字符串 :param lines: :param spliter: :param do_strip: :param remove_empty: :return: """ if isinstance(lines, list): if spliter: lines = [item for line in lines for item in line.split(spliter)] if do_strip: lines = [line.strip() for line in lines] if remove_empty and "" in lines: lines = [line for line in lines if line != ""] return lines return lines def get_lines_from_file(file_path, spliter=";", do_strip=True, remove_empty=True): """ 从文件中读行,返回一个列表。 如果有分割符,会对每行再进行分割 默认对每个元素进行strip 默认删除空字符串 :param file_path: :param spliter: :param do_strip: :param remove_empty: :return: """ encodings_to_try = ['utf-8', 'gbk'] # 尝试的编码列表 for encoding in encodings_to_try: try: with open(file_path, 'r', encoding=encoding) as f: lines = f.readlines() return clean_list(lines, spliter, do_strip, remove_empty) except UnicodeDecodeError: continue except FileNotFoundError: print(f"File not found: {file_path}") return None except Exception as e: print(f"An error occurred: {e}") return None return None # 如果都尝试失败,则返回 None def get_lines_from_quote(text, spliter=";", do_strip=True, remove_empty=True): if not text or not isinstance(text, str): return [] lines = text.splitlines() return clean_list(lines, spliter, do_strip, remove_empty) def get_lines_from_console(spliter=";", do_strip=True, remove_empty=True): lines = [] print("Enter multiple lines of text (Ctrl+D or Ctrl+Z to end):") while True: try: line = input() lines.append(line) except EOFError: break return clean_list(lines, spliter, do_strip, remove_empty) def is_valid_domain(domain): domain_pattern = "^((?!-)[A-Za-z0-9-]{1,63}(? num_of_arg: # return sys.argv[1:-1] #这是错误的,末尾index所在元素是不会被包含的 return sys.argv[1:num_of_arg + 222] # 只要大于长度都可以! else: index = 0 while index < num_of_arg: arg = input("Enter argument {}: ".format(index + 1)) result.append(arg) index += 1 return result def get_textarea_contents(html, name=None): # Parse the HTML with BeautifulSoup soup = BeautifulSoup(html, 'html.parser') if name: # Find all