SELENIUM:element.text 很慢,我不知道为什么

2024-01-02

driver.get('https://nameberry.com/popular_names/US')
boys_names = driver.find_elements_by_css_selector("""tr.even>.boys""")
girls_names = driver.find_elements_by_css_selector("""tr.even>.girls""")
# so this goes quickly

def list_gen(ls): 
    hugo = []
    for i in ls:
        hugo.append(i.text)
    return hugo


i = time()
boys_names = list_gen(boys_names) # takes each <a> tag found before contained in boys_names and creates a list
# of names by taking everything CONTAINED (NOT attributes) between the opening and closing tag <a>
e = time()
print(e-i) # gives ~ 50 sec

i = time()
girls_names = list_gen(girls_names) # same thing but with girl names
e = time()
print(e-i) # gives ~ 80 sec 
# those timings are consistent even though no. of boys and girls is the same
# which is also weird
# no. is 1000 btw so that quite alot

所以基本上我很困惑为什么需要这么长时间。我得出的结论是,由于某种原因,element.text 花费了最多的时间。有没有办法在不导入其他模块的情况下加快速度?


我认为你的代码花费这么长时间的原因是因为循环list_gen在循环时向网页发送一堆请求。如果您在循环中设置断点,并在开发工具运行时查看浏览器的网络页面,您将看到大量请求从循环开始。我认为这是因为当硒向下滚动时页面正在加载新元素。 据我所知,如果你想让它更快,你应该使用其他东西。我的建议是使用美丽的汤。

from selenium import webdriver  
from time import time  
from bs4 import BeautifulSoup  

driver = webdriver.Chrome()  

i = time()  
driver.get('https://nameberry.com/popular_names/US')  
soup = BeautifulSoup(driver.page_source, 'html5lib')  

boys_names = [x.getText() for x in soup.find_all("td", {"class", "boys"})]  
girls_names = [x.getText() for x in soup.find_all("td", {"class", "girls"})]  

e = time()  
print(e - i) # gives ~ 14 sec for me

这会立即获取网页的整个源代码并对其进行解析,而不必使用 css 选择器返回的 webdriver 对象列表。

如果您不使用 selenium 浏览器执行其他任何操作而只想获取名称,则可以使用 requests 更快地获取页面源,因为您不需要加载 selenium 浏览器。

import requests  

i = time()  

response = requests.get('https://nameberry.com/popular_names/US')  
soup = BeautifulSoup(response.content, 'html5lib')  
boys_names = [x.getText() for x in soup.find_all("td", {"class", "boys"})]  
girls_names = [x.getText() for x in soup.find_all("td", {"class", "girls"})]  

e = time()  
print(e - i) # gives ~ 3.2 sec
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SELENIUM:element.text 很慢,我不知道为什么 的相关文章

随机推荐

  • 在 Outlook 2016 中添加上下文菜单项

    在 Outlook 2007 中 当用户右键单击邮件项目时 以下代码将菜单项添加到上下文菜单中 然而在 Outlook 2016 中这不起作用 这段代码根本没有被执行 Sub Application ItemContextMenuDispl
  • Android,我看到堆在增长,但我希望它停止

    我看到我的堆不断增长 并且我知道它最终会在任何设备上崩溃 因为它一直在增长 Grow heap frag case 在整个日志中都可以看到 在我的手机上 当使用 32mb 时 应用程序就会崩溃 其他手机当然是 16mb 如果有那么少的资源运
  • 单击按钮即可更新 asp.net 表

    我是 ASP NET 的新手 遇到了一个非常愚蠢的问题 但我无法弄清楚 我有一个表单 由 page load 上的数据库数据填充 用户更新表单的输入文本并单击 更新 按钮 它会更新 但会使用旧数据进行更新 为什么要用旧数据更新它 这是asp
  • 轨道 HAML 表格

    我目前正在尝试将 ERB 布局转换为 HAML 这是我不断收到的错误 index html haml 18 syntax error unexpected n hamlout format 这是 HAML 页面 row fluid span
  • 如何配置log4j只保留最近7天的日志文件?

    我在使用多个 Java 应用程序时遇到以下日志记录问题log4j用于记录 我希望日志文件每天轮换 例如 log 2010 09 10 log 2010 09 09 log 2010 09 08 log 2010 09 07 log 2010
  • 将单元测试添加到遗留代码[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您是否曾经在事后向遗留代码中添加过单元测试 代码有多复杂 存根和模拟所有内容有多困难 最终的结果值得吗 我发现最好的方法是逐步添加单元测试 而不
  • 如何在 Windows 上的 Perl 中将具有 UTF-8 文件名的文件复制到另一个 UTF-8 文件名?

    例如 给定一个空文件 txt 我该如何制作一个名为 txt copy 我第一次破解它设法访问该文件并创建新文件名 但生成的副本 txt copy 这是我的第一次尝试 usr bin env perl use strict use warni
  • d3 onclick 获取具体路径/栏参考

    如果我有 d3 dc 图表 并且我设置了一个单击事件处理程序 如下所示 var data city New York neighborhood N A hits 200 city New York neighborhood Brooklyn
  • 通过键合并数据框中的行

    如果我有一个带有关键列和数据列的数据框 就像这样 df lt cbind key c Jane Jane Sam Sam Mary var1 c a NA a a c var2 c NA b NA b d key var1 var2 Jan
  • 添加 IIS UrlRewrite 似乎会破坏本地 IIS 服务器上的调试

    这个问题让我发疯 我正在开发一个最近创建的项目 突然我无法调试该特定项目 我使用带有 IIS UrlRewrite 2 模块的本地 IIS 7 5 我的开发机器是 Windows 7 x64 带有 Visual Studio 2010 Pr
  • Visual Studio 2010 中 applicationhost.config 的 IIS Express 路径

    有没有办法告诉 Visual Studio 2010 在启动 IIS Express 时对 config 参数使用什么值 使用 Process Explorer 我可以看到 iisexpress exe 进程由 Visual Studio
  • CUDA中x方向的索贝尔滤波器

    我正在尝试在每个像素的 x 方向上对灰度图像应用索贝尔滤波器并显示结果 X 方向索贝尔滤波器为 1 0 1 2 0 2 1 0 1 我没有得到所需的结果 有人可以指出我的错误吗 我正在尝试使用纹理 但我不太确定我是否正确使用了它 inclu
  • 如何以树形视图显示消息回复? Java 和休眠

    我有消息 需要显示十个 例如 第一个 根 回复以及对其自身的所有回复 并且它应该看起来像一棵树 标准消息和树状回复视图 你知道 所以 问题是 如何从数据库获取它 我正在使用休眠 据我所知 它将需要很多时间 递归地检索整个集合本身以及所有子树
  • Emacs - 如何避免或替换错误的字符编码?

    假设我收到用 MS Word 编写并保存为纯文本 txt 的西班牙语文本 不幸的是 所有的西班牙口音都是这样显示的 Un 372ltimo an 341lisis 谁能告诉我如何避免这种情况 或者至少如何替换这些字符 替换正则表达式函数根本
  • PHP - 验证函数返回 true | false,如果 false 则返回一条消息

    我有一个验证函数 它返回true or false 但是 我希望它提供以下信息问题是什么 当有一个时 假设这个函数是这样的 function is valid val result true if rule 1 not met result
  • 在 Visual Studio 中运行多个 NUnit 项目

    我有一个包含多个项目的解决方案 包括 NUnit 测试项目 所以解决方案看起来像这样 使用通用名称 这些不是实际名称 Solution Project1 Project1 Test Project2 Project2 Test Projec
  • 用于在 MySQL 中执行非常大 (20 GB) .sql 文件的更高速度选项

    为了响应政府的数据请求 我的公司收到了一个 20 GB 的 sql 文件 我没有太多选择来获取不同格式的数据 因此我需要选择如何在合理的时间内导入数据 我使用 Navicat 的批处理执行工具在高端服务器 Win 2008 64 位 MyS
  • “#define STR(a) #a”有什么作用?

    我正在阅读phoneME的源代码 它是一个 FOSS JavaME 实现 它是用 C 编写的 我偶然发现了这一点 Makes a string of the argument which is not macro expanded defi
  • 在 Swift 中,你能找到模块中遵守特定协议的所有类型吗?

    在 Swift 4 中 是否可以找到当前模块中遵守特定协议的所有类型 例如 假设我定义了这个协议和这些类 protocol Animal protocol Vehicle protocol Favorite class Dog Animal
  • SELENIUM:element.text 很慢,我不知道为什么

    driver get https nameberry com popular names US boys names driver find elements by css selector tr even gt boys girls na