- Chrome版本:105.0.5195.102
- 硒==4.4.3
- Python==3.9.12
在某个页面中,'element.text'需要大约0.x秒,这是无法忍受的。我想'element.text'应该只返回缓存页面中的一个文本,所以无法理解它需要很长时间我怎样才能更快
这里有类似的QNA,但我需要用Selenium来解决这个问题。
- 使用BeatufulSoup解析文本
- 使用lxml分析文本
另一个问题:为什么每个"element.text"都需要不同的时间
例如,
import chromedriver_autoinstaller
import time
from selenium import webdriver
chromedriver_autoinstaller.install(cwd=True)
options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument('--no-sandbox')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option("excludeSwitches", ["enable-logging"])
wd = webdriver.Chrome(options=options)
wd.get("https://www.bbc.com/")
t0 = time.time()
e = wd.find_element(By.CSS_SELECTOR, "#page > section.module.module--header > h2")
print(time.time()-t0)
for i in range(10):
t0 = time.time()
txt = e.text
print(time.time()-t0)
# This prints different result for every loop.
wd.quit()
Selenium可能有点慢,因为它不能直接与Chrome配合使用。通信是通过Chrome网络驱动程序进行的。
如果您希望使用更快、更好的Automation插件,请尝试使用PlayWright
。
你可以尝试的另一件事是直接找到你的元素,而不是使用长CSS或长Xpath表达式。您的表达式将越长->找到它及其文本所需的时间就越长
我看到您的代码的以下输出:
0.0139617919921875
0.01196908950805664
0.003988742828369141
0.004987955093383789
0.003988027572631836
0.0039899349212646484
0.003989219665527344
0.004987955093383789
0.003987789154052734
0.003989696502685547
0.0049860477447509766
前两次大约为12-14毫秒,而其他两次大约是4毫秒
第一个动作
wd.find_element(By.CSS_SELECTOR, "#page > section.module.module--header > h2")
正在轮询DOM,直到找到与给定定位器匹配的元素为止
虽然txt = e.text
行使用了对页面上元素的现有引用,因此它不执行任何轮询/搜索,只需通过现有引用(指针(访问页面上的元素,这就是为什么它花费的时间要少得多
为什么第二次和第一次一样长我不知道
我运行了几次这个测试,得到了不同的输出,但主要是图片是+-相同的。