You can test this tool on the official webpage

Python tutorials with source code, examples, guides, and tips and tricks for Windows and Linux development.
pip install playwright
playwright installimport asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.firefox.launch(headless=False)
context = await browser.new_context()
page = await context.new_page()
await page.goto("https://www.google.com")
queries = [
"python automation",
"playwright tutorial",
"google search automation"
]
with open("results.txt", "w", encoding="utf-8") as f:
for q in queries:
# Fill search box
await page.fill("textarea[name='q']", q)
await page.press("textarea[name='q']", "Enter")
await page.wait_for_load_state("domcontentloaded")
# Scroll + pause
await page.evaluate("window.scrollBy(0, document.body.scrollHeight)")
await page.wait_for_timeout(3000)
# Extract search results (titles + links)
results = await page.query_selector_all("h3")
f.write(f"\nResults for: {q}\n")
for r in results[:5]: # primele 5 rezultate
title = await r.inner_text()
link_el = await r.evaluate_handle("node => node.parentElement")
link = await link_el.get_attribute("href")
f.write(f"- {title} ({link})\n")
print(f"Saved results for: {q}")
await browser.close()
asyncio.run(main())
python google_search_test_001.py
Saved results for: python automation
Saved results for: playwright tutorial
Saved results for: google search automation
Results for: python automation
Results for: playwright tutorial
- Playwright: Fast and reliable end-to-end testing for modern ... python -m pip install 'xonsh[full]'
pip install mitmproxy# addon.py
from mitmproxy import http
from mitmproxy import ctx
import re
BLOCKED_HOSTS = {
"hyte.com",
"ads.example.org",
}
REWRITE_RULES = [
# Each rule: (pattern, replacement, content_type_substring)
(re.compile(rb"Hello World"), b"Salut lume", "text/html"),
(re.compile(rb"tracking", re.IGNORECASE), b"observare", "text"),
]
ADD_HEADERS = {
"X-Debug-Proxy": "mitm",
"X-George-Tool": "true",
}
class GeorgeProxy:
def __init__(self):
self.rewrite_count = 0
def load(self, loader):
ctx.log.info("GeorgeProxy addon loaded.")
def request(self, flow: http.HTTPFlow):
# Block specific hosts early
host = flow.request.host
if host in BLOCKED_HOSTS:
flow.response = http.Response.make(
403,
b"Blocked by GeorgeProxy",
{"Content-Type": "text/plain"}
)
ctx.log.warn(f"Blocked request to {host}")
return
# Add custom headers to outgoing requests
for k, v in ADD_HEADERS.items():
flow.request.headers[k] = v
ctx.log.info(f"REQ {flow.request.method} {flow.request.url}")
def response(self, flow: http.HTTPFlow):
# Only process text-like contents
ctype = flow.response.headers.get("Content-Type", "").lower()
raw = flow.response.raw_content
if raw and any(t in ctype for t in ["text", "html", "json"]):
new_content = raw
for pattern, repl, t in REWRITE_RULES:
if t in ctype:
new_content, n = pattern.subn(repl, new_content)
self.rewrite_count += n
if new_content != raw:
flow.response.raw_content = new_content
# Update Content-Length only if present
if "Content-Length" in flow.response.headers:
flow.response.headers["Content-Length"] = str(len(new_content))
ctx.log.info(f"Rewrote content ({ctype}); total matches: {self.rewrite_count}")
ctx.log.info(f"RESP {flow.response.status_code} {flow.request.url}")
addons = [GeorgeProxy()]mitmdump -s addon.py
[21:46:04.435] Loading script addon.py
[21:46:04.504] GeorgeProxy addon loaded.
[21:46:04.506] HTTP(S) proxy listening at *:8080.
[21:46:18.547][127.0.0.1:52128] client connect
[21:46:18.593] REQ GET http://httpbin.org/get
[21:46:18.768][127.0.0.1:52128] server connect httpbin.org:80 (52.44.182.178:80)
[21:46:18.910] RESP 200 http://httpbin.org/get
127.0.0.1:52128: GET http://httpbin.org/get
<< 200 OK 353b
[21:46:19.019][127.0.0.1:52128] client disconnect
[21:46:19.021][127.0.0.1:52128] server disconnect httpbin.org:80 (52.44.182.178:80)curl -x http://127.0.0.1:8080 http://httpbin.org/get
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"Proxy-Connection": "Keep-Alive",
"User-Agent": "curl/8.13.0",
"X-Amzn-Trace-Id": "Root=1-692c9f0b-7eaf43e61f276ee62b089933",
"X-Debug-Proxy": "mitm",
"X-George-Tool": "true"
},
"origin": "84.117.220.94",
"url": "http://httpbin.org/get"
}Python Tornado – Key Capabilities
import tornado.ioloop
import tornado.web
import os
class FormHandler(tornado.web.RequestHandler):
def get(self):
self.render("form.html") # Render an HTML form
def post(self):
name = self.get_argument("name")
self.write(f"Hello, {name}!")
def make_app():
return tornado.web.Application([
(r"/form", FormHandler),
],
template_path=os.path.join(os.path.dirname(__file__), "templates") # <-- aici
)
if __name__ == "__main__":
app = make_app()
app.listen(8888)
print("Server pornit pe http://localhost:8888/form")
tornado.ioloop.IOLoop.current().start()
import os
from xai_sdk import Client
from xai_sdk.chat import user
client = Client(
api_key=os.getenv("XAI_API_KEY"),
api_host="us-east-1.api.x.ai" # Without the https://
)
chat = client.chat.create(model="grok-4")
chat.append(user("What is the meaning of life?"))
completion = chat.sample()import pymem
import pymem.process
import re
# Open the Edge process (make sure it's running)
pm = pymem.Pymem("msedge.exe")
# Get the main module of the process
module = pymem.process.module_from_name(pm.process_handle, "msedge.exe")
base = module.lpBaseOfDll
size = module.SizeOfImage
# Read the module's memory
data = pm.read_bytes(base, size)
# Search for a test pattern (generic example)
pattern = re.search(rb'\x48\x89\x5C\x24\x08\x57\x48\x83', data)
if pattern:
address = base + pattern.start()
print(f"Pattern found at: {hex(address)}")
# Read 8 bytes from the found address
raw = pm.read_bytes(address, 8)
print("Raw bytes:", raw)
# Interpret the bytes as a little-endian integer
value = int.from_bytes(raw, byteorder='little')
print("Integer value:", value)
# Write a new value (e.g., 12345678)
new_value = (12345678).to_bytes(8, byteorder='little')
pm.write_bytes(address, new_value, 8)
print("Value overwritten with 12345678.")
else:
print("Pattern not found.")
# Close the process handle
pm.close_process()
pattern = re.search(rb'\x48\x89\x5C\x24\x08\x57\x48\x83', data)
48 89 5C 24 08 → mov [rsp+8], rbx
57 → push rdi
48 83 → the start of an instruction like add/sub/cmp with a 64-bit operandpython pymem_exemple_002.py
Pattern found at: 0x7ff7180cb3d5
Raw bytes: b'H\x89\\$\x08WH\x83'
Integer value: 9459906709773125960
Value overwritten with 12345678.

