python - 如何将一个循环终止到Python多线程中去
我想创建一个简单的脚本,用它可以用selenium Chrome和Flask拍摄一些屏幕截图。
import threading
import requests
from flask import Flask
from selenium import webdriver as wd
html = requests.get(website_to_scrape).text
def webpage(html_string):
app = Flask(__name__)
@app.root('/')
def dummy_page():
return html_string
app.run()
p = threading.Thread(target=webpage, args=(html, ), daemon=True)
p.start()
p.run()
browser = wd.Chrome()
browser.get('my_proxy_from_flask_')
browser.save_screenshot('screen.png')
我如何修改我的代码,以便在截屏后中断Flask.run()循环?
或者是否有办法在flask.run()循环运行时,我可以从另一个线程中更改html_page?这段代码的一部分将在一个循环中传递不同的html_string参数。
由于个人原因,我没有直接使用selenium chrome来截图。
【回答】:
你可以将url作为查询参数传给flask代理,然后从flask发出请求,返回页面来实现你想要的东西。
import threading
import requests
from flask import Flask, request
from selenium import webdriver as wd
def webpage():
app = Flask(__name__)
@app.route('/')
def dummy_page():
url = request.args.get('url')
html = requests.get(url).text
return html
app.run()
p = threading.Thread(target=webpage, daemon=True)
p.start()
browser = wd.Chrome()
url = 'example_url_of_the_site'
browser.get(f'http://127.0.0.1:5000?url={url}')
browser.save_screenshot('screen.png')
对了,你的代码有一个错别字。@app.root('/')
-> @app.route('/')