当前位置: 首页 > 知识库问答 >
问题:

如何用Selenium跳过Python中“无法找到具有类名的元素”错误

杭涵映
2023-03-14

下面的代码做了我需要它做的事情,除非它遇到一个缺少class_name的产品,比如说product-price。我需要帮助的是如何跳过那个特定的项目,转移到下一个项目。目前我得到以下错误:

import csv
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException

b = open('csv/homedepotfridges.csv', 'w', newline='')
a = csv.writer(b,delimiter=',')

driver = webdriver.PhantomJS()
driver.get('https://www.homedepot.ca/en/home/categories/appliances/dishwashers.html#!p=0&q=*%3Aprice-asc%3AcategoryPathHierarchy%3A2%2Fhd-classes%2Fl1-appliances%2Fl2-dishwashers')
items = []

for item in driver.find_elements_by_class_name('item'):
    try:
        model = item.find_element_by_class_name('product-model')
        price = item.find_element_by_class_name('product-display-price')
        title = item.find_element_by_class_name('product-title')
        url = item.find_element_by_class_name('js-detail-link')

        items.append({'model': model, 'price': price, 'title': title, 'url': url})
        print (model.text, price.text, title.text, url.get_attribute("href"))
        c = (model.text, price.text, title.text, url.get_attribute("href"))
        a.writerow(c)

    except NoSuchElementException:
        model = 'n/a'
        price = 'N/A'
        title = 'N/A'
        url = 'N/A'
        items.append({'model': model, 'price': price, 'title': title, 'url': url})
        print(model.text, price.text, title.text, url.get_attribute("href").text)
        c = (model.text, price.text, title.text, url.get_attribute("href"))
    a.writerow(c)


b.close()

Traceback(最近调用最后):文件“/users/user/pycharmprojects/test/homedepotdishwashers.py”,第31行,打印(model.text,price.text,title.text,url.get_attribute.text(“href”))AttributeError:'str'对象没有属性'text'

感谢任何帮助

共有1个答案

鲜于念
2023-03-14

有几种方法可以做到这一点。你试过吗?

1)用try包围行-除了https://docs.python.org/3/tutorial/errors.html

from selenium.common.exceptions import NoSuchElementException

for item in driver.find_elements_by_class_name('item'):
    try:
        model = item.find_element_by_class_name('product-model')
        price = item.find_element_by_class_name('product-display-price')
        title = item.find_element_by_class_name('product-title')
        url = item.find_element_by_class_name('js-detail-link')

        items.append({'model': model, 'price': price, 'title': title, 'url': url})
        print (model.text, price.text, title.text, url.get_attribute("href"))
        c = (model.text, price.text, title.text, url.get_attribute("href"))
        a.writerow(c)
    except NoSuchElementException:
        #here you can do what you want to do when an element is not found. Then it'll continue with the next one.

b.close()

2)使用if语句检查是否找到了该项。为此,您可以将所有这些元素列成一个列表(find_elements_by_...),并查看该列表的长度是否大于0。例如:

 类似资料:
  • 我试图自动登录到网站https://opensource-demo.orangehrmlive.com/web/index.php/auth/login使用硒通过它给出了一个错误 selenium.common.exceptions.NoSuchElementException: 消息: no suchElement: 无法找到元素: {“method”:“css selector”,“selec

  • 我正在编写一个Python程序,该程序使用Selenium导航到高级搜索页面上的搜索框中并在搜索框中输入信息。本网站使用 Javascript,每次加载网站时,每个搜索框的 ID 和名称都会略有变化,但类名保持不变。类名经常被重用,所以我的目标是使用然后通过该列表编制索引。 例如,一个框的类名是 ,但我不能使用它,因为 selenium 认为它是一个复合类名并抛出一个错误。如果我只使用它的一部分,

  • 问题内容: 我使用上面的python代码来练习一些基本的Selenium操作。我找不到任何元素,无论是名称还是ID。不管我尝试什么,我总是会遇到相同的错误,这表明我要查找的元素不存在。(想法是按一下其中一个按钮…) 这是网站html代码的一部分: 这是所说的网站(链接断开) 任何帮助将不胜感激。 顺便说一句,这是我尝试运行的第一个使用Selenium的程序,是否有可能需要更改某些设置或需要安装其他

  • 问题内容: 我有一个工作脚本,可以使用selenium登录到站点,如下所示: script.py 通过以下方式在安装了Firefox的 亚马逊Ubuntu盒子 上运行该脚本: 我得到的错误是: selenium.common.exceptions.NoSuchElementException:消息:u’无法找到元素:{“ method”:“ id”,“ selector”:“ content”}’

  • 我尝试使用Python selenium(新的)做一些自动化。不幸的是,检查特定网页的元素不仅仅是困难的。没有id可以使用,我尝试xpath。我想选择一个下拉列表,我检查这个元素,然后复制xpath,它是//*[@id="frmMain:purchase_criteria_tab"]/div[13]/div[1]/div/按钮 我的代码是: 我不明白这个元素有什么想法吗?提前谢谢你。

  • 问题内容: 我有一个复杂的html结构,其中包含许多表和div ..而且结构可能会更改。如何通过跳过两者之间的元素来查找xpath。例如 : 我必须获取有关“名字”范围的输入元素 例如: 但是..我可以跳过htmls之间的内容并直接访问输入元素吗? 问题答案: 您可以尝试以下Xpath: 说明: 选择元素: 然后在上方元素旁边获取元素: 然后在上面第二步中选择的元素内获取元素: