python - 如何使用 webdriver 和 python 来提高执行时间
问题描述
在下面的代码中,我试图在不同的 url 中导入几场足球比赛的赔率。我使用 webdriver.firefox 导航到这些网页中的每一个。我的问题是执行时间太长。
就我而言,有 25 个 url 链接,但我第一次只用 4 个 url 链接进行测试。执行时间为 2.37 分钟,因此 25 个 url 链接大约需要 20 分钟。时间太多了。所以我想知道这次是否可以改进和优化
这是我的代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from selenium import webdriver
import statistics as stat
import numpy as np
driver = webdriver.Firefox()
url = 'https://www.coteur.com/cotes-foot.php'
driver.get(url)
#Store url associated with the soccer games
url_links = []
for i in driver.find_elements_by_xpath('//a[contains(@href, "match/cotes-")]'):
url_links.append(i.get_attribute('href'))
driver.close()
print(len(url_links))
for l in range(0, 4):
driver = webdriver.Firefox()
driver.get(url_links[l])
#Store odds into table
odds = []
header = []
for i in driver.find_elements_by_xpath('//button[contains(@class, "btn btn-default btn-xs btncote")]'):
odds.append(i.text)
for i in driver.find_elements_by_xpath('//th[contains(@width, "20%")]'):
header.append(i.text)
rows = int(len(odds)/3)
columns = 3
odds = [float(i) for i in odds]
odds = np.array(odds)
header = np.array(header)
odds = odds.reshape(rows, columns)
print(odds, '\n')
driver.close()
这是输出:
hao@hao-ThinkPad-T420:~$ time ./parallel.py
25
[[1.28 5.2 7.25]
[1.33 4.7 6.55]
[1.33 4.6 6.5 ]
[1.37 4.4 6. ]
[1.37 4.4 6. ]
[1.3 4.6 7. ]
[1.31 4.5 6.7 ]
[1.31 4.7 6.3 ]
[1.27 4.8 7. ]
[1.26 4.8 6.75]
[1.25 4.9 6.75]
[1.24 4.7 6.75]]
[[1.8 3.58 3.77]
[1.8 3.35 3.9 ]
[1.8 3.4 3.7 ]
[1.8 3.36 3.62]
[1.8 3.35 3.55]
[1.8 3.35 3.5 ]
[1.73 3.45 3.55]
[1.73 3.4 3.6 ]
[1.73 3.4 3.6 ]
[1.76 3.3 3.45]
[1.72 3.35 3.55]]
[[3.5 3.7 1.8 ]
[2.98 3.51 1.96]
[2.95 3.5 1.95]
[2.91 3.5 1.96]
[3.35 3.7 1.75]
[3.22 3.6 1.81]
[3.25 3.6 1.78]
[3.3 3.75 1.73]
[3.3 3.65 1.73]
[3.3 3.6 1.72]
[2.5 3.1 2.2 ]]
[[3.3 3.5 2.32]
[3.4 3.55 2.25]
[3.4 3.55 2.25]
[3.4 3.55 2.25]
[3.4 3.55 2.25]
[3.35 3.35 2.3 ]
[3.25 3.45 2.22]
[3.25 3.4 2.22]
[3.3 3.45 2.15]
[3.3 3.25 2.2 ]
[3.15 3.3 2.17]]
real 2m37,742s
user 1m1,416s
sys 0m11,797s
解决方案
推荐阅读
- kubernetes - 证书管理器订单处于无效状态
- java - 如何为 Java 8 Instant 类启用 POJO 映射?
- database - AWS AppSync - 使用 1-M @connections 和加入 @model 实施多对多连接
- python - 使用带有 max_queue_size、workers 和 use_multiprocessing 的 keras fit/fit_generator
- c - 有没有办法在 Enterprise Architect 中修改或编写新版本的 CSTYLE_COMMENT?
- c# - 我想用按钮调用 appshell,但应用程序崩溃 XamarinForms
- node.js - 如何在不下载的情况下通过 Node.js 传递文件?
- ecmascript-6 - 如何确定模块的 ES 版本
- workday-api - Workday soap api - Get_Candidates 操作
- rabbitmq - 消费者确认消息时的事件