9阅网

您现在的位置是:首页 > 知识 > 正文

知识

python - 如何将一个循环终止到Python多线程中去

admin2022-11-06知识19

我想创建一个简单的脚本,用它可以用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('/')