是否可以首先为每个任务打开浏览器,然后再加载链接? 这段代码引发了一个错误。
import asyncio
from selenium import webdriver
async def get_html(url):
driver = await webdriver.Chrome()
response = await driver.get(url)
类型错误: 对象WebDriver无法在 'await' 表达式中使用
是否可以首先为每个任务打开浏览器,然后再加载链接? 这段代码引发了一个错误。
import asyncio
from selenium import webdriver
async def get_html(url):
driver = await webdriver.Chrome()
response = await driver.get(url)
类型错误: 对象WebDriver无法在 'await' 表达式中使用
如果您想以异步方式使用Selenium,我建议使用多个驱动程序实例和这样的执行者:
import asyncio
from concurrent.futures.thread import ThreadPoolExecutor
from selenium import webdriver
executor = ThreadPoolExecutor(10)
def scrape(url, *, loop):
loop.run_in_executor(executor, scraper, url)
def scraper(url):
driver = webdriver.Chrome("./chromedriver")
driver.get(url)
loop = asyncio.get_event_loop()
for url in ["https://google.de"] * 2:
scrape(url, loop=loop)
loop.run_until_complete(asyncio.gather(*asyncio.all_tasks(loop)))
请注意,您可以在无头模式下运行selenium,因此您不需要为调用一些简单的url生成整个GUI。