【问题标题】:Unable to scrape data using selenium find_element_by_class_name() in python无法在 python 中使用 selenium find_element_by_class_name() 抓取数据
【发布时间】:2021-11-21 11:23:18
【问题描述】:

我是网络抓取的新手,不是开发人员,也没有任何 html exp。并在登录网站后试图从我的帐户中提取一些详细信息,但在find_element_by_class_name() 中出现错误

这是我尝试过的代码:

from selenium import webdriver

driver = webdriver.Chrome('path/chromedriver.exe')
driver.get("https://www.URL.COM") 

# logged into account manually & maneuvered to the page manually

driver.find_element_by_class_name('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt')

错误

---------------------------------------------------------------------------
NoSuchElementException                    Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_14516/1270707966.py in <module>
----> 1 driver.find_element_by_class_name('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt')

C:\ProgramData\Miniconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_element_by_class_name(self, name)
    562             element = driver.find_element_by_class_name('foo')
    563         """
--> 564         return self.find_element(by=By.CLASS_NAME, value=name)
    565 
    566     def find_elements_by_class_name(self, name):

也试过了

driver.find_element_by_css_selector('css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt')

来自inspect 我能够查看此内容并尝试提取图像中突出显示的内容:

【问题讨论】:

    标签: python-3.x selenium selenium-webdriver


    【解决方案1】:

    类名需要一个类名。当你在这里传递多个类名时

    css-901oao css-cens5h r-1khnkhu r-13awgt0 r-1oke55r r-1enofrn r-1wzrnnt
    

    这行不通。

    相反

    删除空格并从中创建一个 CSS 选择器。

    driver.find_element(By.CSS_SELECTOR, ".css-901oao.css-cens5h.r-1khnkhu.r-13awgt0.r-1oke55r.r-1enofrn.r-1wzrnnt")
    

    另外,请记住 find_element_by_class_name 在最新的 selenium 中已被弃用。你应该改用这个

    find_element(By.CLASS_NAME, "class name")
    

    话虽如此,您现在使用的定位器本质上看起来很脆弱。请使用静态属性值。

    你可以试试这个xpath

    //div[starts-with(@class,'css')]//div[@dir='auto' and contains(@style,'-webkit-line-clamp')]
    

    如果我们在HTML DOM 中有唯一条目,请检查dev tools(谷歌浏览器)。

    你应该检查的xpath:

    //div[starts-with(@class,'css')]//div[@dir='auto' and contains(@style,'-webkit-line-clamp')]
    

    检查步骤:

    Press F12 in Chrome -> 转到element 部分 -> 做一个CTRL + F -> 然后粘贴xpath 看看,如果你想要的element 用@ 得到突出显示 987654334@匹配节点。

    【讨论】:

    • 当我尝试driver.find_element_by( 时,我收到错误AttributeError: 'WebDriver' object has no attribute 'find_element_by'。所以我尝试了driver.find_element(By.CSS_SELECTOR, ".css-901oao.css-cens5h.r-1khnkhu.r-13awgt0.r-1oke55r.r-1enofrn.r-1wzrnnt"),但随后出现错误:NameError: name 'By' is not defined
    • 我的坏人!有一个错字,我更正了。请立即尝试。
    • 请导入from selenium.webdriver.common.by import By
    • 如果像你在for tag in table:那样进行迭代,它应该是find_elements而不是find_element
    • 通过使用find_elements 它对我有用。非常感谢您留在这里并帮助我度过难关。真的真的很感激:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多