如何修复尝试使用 Selenium 查找元素时引发的 TypeError?

2024-01-11

我正在尝试从网页上抓取所有链接。我正在使用 Selenium WebDriver 滚动并单击网页中的“加载更多”按钮。我正在尝试的代码如下所示:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import ElementNotVisibleException
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from bs4 import BeautifulSoup

def fetch_links(url):
    chrome_path = r"D:\nishant_pc_d_drive\nishant_pc\d_drive\update_engine\myntra_update\chromedriver.exe"
    driver = webdriver.Chrome(chrome_path)
    driver.get(url)

    while True:
        try:
            scrollcount=1
            while scrollcount<5:
                driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
                WebDriverWait(driver, 5)
                scrollcount+=1

            WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_elements_by_css_selector('.load_more .sbt-button, .load_more_order .sbt-button')))
            driver.find_element_by_id("loadmore").click()
        except (ElementNotVisibleException,NoSuchElementException) as e:
            print "done"

    x = driver.page_source
    soup2 = BeautifulSoup(x, 'html.parser')
    linkcount=0
    for each in soup2.find_all('a',attrs={"class":"thumb searchUrlClass"}):
        print "https://www.shoppersstop.com/"+each.get('href')
        linkcount+=1
    print linkcount

# thumb searchUrlClass

fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020")

但不幸的是它给了我一个错误,如下所示:

Traceback (most recent call last):
  File "D:/INVENTORY/shopperstop/fetch_link.py", line 36, in <module>
    fetch_links("https://www.shoppersstop.com/women-westernwear-tops-tees/c-A206020")
  File "D:/INVENTORY/shopperstop/fetch_link.py", line 21, in fetch_links
    WebDriverWait(driver, 10).until(EC.presence_of_element_located(driver.find_element_by_class_name('sbt-button')))
  File "C:\Python27\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
    value = method(self._driver)
  File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 63, in __call__
    return _find_element(driver, self.locator)
  File "C:\Python27\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 328, in _find_element
    return driver.find_element(*by)
TypeError: find_element() argument after * must be an iterable, not WebElement 

我该如何修复这个错误?谢谢!


错误文本确实令人困惑。

基本上,一些预期条件 (EC) 方法使用locators,虽然有些使用elements。您使用的仅接受locator,但是你提供了一个element反而。

Selenium API 文档中对这种差异进行了解释here https://seleniumhq.github.io/selenium/docs/api/py/webdriver_support/selenium.webdriver.support.expected_conditions.html#module-selenium.webdriver.support.expected_conditions:

element is a WebElement object.
locator is a tuple of (by, path).

一个实际的例子locator is (By.ID, 'someid')(您需要导入 Selenium 的“By”类)

因此,这是错误提供元素的初始代码:

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located(driver.find_element_by_class_name('sbt-button'))
)

应该更新它以提供定位器:

WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'sbt-button'))
)

注意双括号。这是一个传递给 EC 方法的元组。

注意:在您的情况下,您似乎还需要多个元素,因此您还需要使用EC.presence_of_all_elements_located()代替EC.presence_of_element_located().

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

如何修复尝试使用 Selenium 查找元素时引发的 TypeError? 的相关文章

随机推荐

  • Android - 在运行时更改片段布局

    我想在我的应用程序中实现单活动多片段设计 我计划有几个 屏幕 片段的布局 我将在代码中切换 可能添加到后台堆栈 据我了解 每个屏幕中片段的布局是使用布局对象 例如 FrameLayout 设置的 该对象充当片段的占位符 共享相同的 ID 由
  • Spring 拦截 url 模式

    Spring Security 拦截 url 模式与 path 或 path 有什么区别 我见过一些具有以下内容的 Spring 安全配置 但我不明白 与 The vs 现在框架中很常见 通常称为Apache Ant Pathing或类似的
  • 指针、引用和常量引用参数的函数调用歧义

    我想做的是 允许使用 setter 函数传递指针 引用或常量引用 class A std string p std string st public A p 0 A setS const std string s std cout lt l
  • 新版本的java可以在旧版本上运行吗? [复制]

    这个问题在这里已经有答案了 我有一个疑问 java是向后兼容还是向前兼容 另外 我们可以在具有 JDK 8 的 MAC 上运行用 JDK 11 Windows 编写的 java 字节码吗 我试图理解平台独立性的概念 简短回答 是的 这才是重
  • 是否可以在运行时获取依赖版本,包括从库本身获取依赖版本?

    背景 假设我制作了一个名为 MySdk 的 Android 库 并将其发布到 Jitpack Maven 上 SDK 的用户只需添加以下依赖项即可使用它 implementation com github my sdk MySdk 1 0
  • 使用位移位求整数平方根的最快方法是什么?

    我一直在寻找最快的方法来计算数字 整数 的平方根 整数 我在维基百科中遇到了这个解决方案 它找到一个数字的平方根 如果它是一个完美的平方 或其最接近的下完美平方的平方根 如果给定的数字不是一个完美的平方 short isqrt short
  • 将 XML 转换为 C# 对象

    我需要从这些 xml 数据中获取 OrderID
  • 如何从handlebars.js部分加载多个模板

    有没有一种简单的方法可以使用handlebars js 加载包含多个模板的部分 就像使用mustache js 和来自 jonnyreeves 的 jQuery 插件 https github com jonnyreeves jquery
  • 使用 eclipse 的 Android multidex 支持库

    使用 Eclipse 可以使用 multidex 生成 Android 项目来创建多个 dex 文件 在网上搜索我发现如何使用 gradle 来做到这一点 但没有关于使用它 没有 gradle 的 Eclipse 看起来像ADT蚂蚁任务项目
  • VB.NET WebBrowser禁用javascript

    有没有办法在 vb net 中禁用 javascript webbrowser 对我有用 Private Function TrimScript ByVal htmlDocText As String As String While htm
  • 检测 Spring Boot 应用程序时的类路径问题

    我有一个 springboot 应用程序 我正在尝试使用 bytebuddy 来检测它 我遇到了我无法理解的类路径问题 首先 以下是这方面的其他文献 https github com raphw byte buddy issues 473
  • 如何在 Coq 中切换当前目标?

    是否可以切换当前目标或子目标来在 Coq 中进行证明 例如 我有一个这样的目标 来自 eexists 1 1 s gt 0 r1 r1 s1 s r3 r3 s2 我想做的是split并首先证明正确的连接 我认为这将给出存在变量的值 s 并
  • Apache Thrift 和 ZeroMQ 之间的区别

    据我了解 Apache Thrift 和 ZeroMQ 是属于不同类别的软件 并且很难进行比较 因为这是苹果与橘子的比较 但我不知道为什么它们属于不同的类别 它们不是都用于在不同的服务之间传递数据吗 这些服务可能用不同的语言编写 也可能不是
  • QT 以普通用户身份启动程序

    我的自动更新程序需要管理员权限才能运行 因为它会修改程序文件夹中的文件 这一切都很好 但是 更新完成后我想要我的updater exe开始myApplication exe but without管理员权限 我当前用于从 updater e
  • bitbucket web:突出显示或灰显的合并提交?

    我想知道为什么在 bitbucket webui 的提交视图中 我看到一些合并提交的 M 为灰色 而其他提交则为彩色 如何设置或如何检测它们 我无法找到有关此行为的任何文档 此行为基于提交评论 它必须包含以下行 Conflicts src
  • Visual Studio regex_iterator 错误?

    我使用的是 Visual Studio 2013 我发现了一个错误 我希望有人可以确认 string foo A nB rC n r vector
  • 如何从 RecyclerView 中的编辑文本获取数据?

    我有带有编辑文本的recyclerview 每行都有一个编辑文本 我在编辑文本中手动输入值 输入值后 我想在每一行中获取这些值 我想将这些值添加到主要活动中 recyclerview 中可能有 10 到 20 行 我想获取这些编辑文本中的所
  • 如何防止lombok被打包到Spring Boot jar中?

    如果您访问官方龙目岛 Maven 指南 http projectlombok org mavenrepo 你会发现它的范围应该是provided 当我使用从头开始创建一个新项目时启动 spring io http start spring
  • 带有 OpenGL 的 Qt MDI 应用程序:如何获取有效的屏幕截图?

    我有一个MDI http en wikipedia org wiki Multiple document interface用 Qt 编写的应用程序 一些子窗口包括QGLWidgets 即 OpenGL 上下文 其中最突出的是使用 Open
  • 如何修复尝试使用 Selenium 查找元素时引发的 TypeError?

    我正在尝试从网页上抓取所有链接 我正在使用 Selenium WebDriver 滚动并单击网页中的 加载更多 按钮 我正在尝试的代码如下所示 from selenium import webdriver from selenium web