【问题标题】:Finding an element from a list of Webelements in Selenium using Python使用 Python 从 Selenium 中的 Webelements 列表中查找元素
【发布时间】:2021-07-30 20:43:43
【问题描述】:

class= "a1"这是一个后续问题:Accessing a webelement within a list of webelement in Selenium using Pything

HTML 文件 TEST2.html

<!DOCTYPE html>
<html>
    <body>
        <div class="w-30-ns W-100 pp">
            <h1 class = "a1">My First Heading</h1>
        </div>
         <div class="w-30-ns W-100 pp">
            <h1 class = "a1">My Second Heading</h1>
        </div>
         <div class="w-30-ns W-100 pp">
            <h1 class = "a1">My Third Heading</h1>
        </div>       
    </body>
</html>

试图找到所有类“a1”。 find_element_by_tag_name 有效。 find_element_by_class_name 不起作用。我收到“NoSuchElementException”消息:没有这样的元素:无法找到元素:{"method":"css selector","selector":".a1"}

from typing import List, Text
from selenium import webdriver
from selenium.webdriver.remote.webelement import WebElement

driver = webdriver.Chrome()
url = 'C:\\Users\\ed821\\Downloads\\TEST2.html'
driver.get(url)

titles = driver.find_elements_by_class_name("pp")

for title in titles:
    heading = title.find_element_by_tag_name("h1")      ## This works
    heading2 = title.find_element_by_class_name("a1")   ## This does not
    print("Title is:" + heading.text)
    print("Also: " + heading2)

我需要按“类”(而不是标签)搜索。上面的例子当然只是为了这个例子而构建的,但是真实的网页包含太多类似的标签。

【问题讨论】:

  • 如果直接 class_name 不起作用,那么您是否尝试过 css 选择器?
  • 你能举个例子吗?我虽然这是一个 CSS 选择器。

标签: python selenium-webdriver


【解决方案1】:

我在只需要单引号的地方使用双引号。

find_element_by_tag_name 需要双引号, find_element_by_class_name 需要单引号。

文档here

所以:

driver = webdriver.Chrome()
url = 'C:\\Users\\ed821\\Downloads\\TEST2.html'
driver.get(url)

titles = driver.find_elements_by_class_name("pp")

for title in titles:
    heading = title.find_element_by_tag_name("h1")      ## This works
    heading2 = title.find_element_by_class_name('a1')   ## This works
    print("Title is:" + heading.text)
    print("Also: " + heading2.text)

【讨论】:

  • 我不认为“引号”是这里的问题,因为单引号和双引号都对我有用。而python完美支持“双引号”和“单引号”。无论如何,我在print("Also: " + heading2) 中发现了问题,在这里你将stringFirefoxWebElement 连接起来,你应该这样做heading2.text。但是错误并没有表明这一点,我还没有将其发布为答案。
  • 是的。谢谢...我在此之前放置了一个断点,并且在打印之前导致了异常。单引号没有错误。双引号对我来说是错误的。奇怪你没看到??
  • 我没看懂,贴出你的答案,像这样我有这个问题,我自己解决了,我通过这样做解决了我的问题。 :) 如果他们有类似的问题,这将对未来的人有所帮助!
猜你喜欢
  • 1970-01-01
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
相关资源
最近更新 更多