Search code examples
pythonselenium-webdriverxpathwebdriverwaitfindelement

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".ui flu~"}


This is the code I use:

import requests as r, sys as sus, bs4 as bs, webbrowser as wb
from selenium import webdriver as wd

dr = wd.Chrome()

b = r.get("https://uupdump.net/fetchupd.php?arch=amd64&ring=wif&build=latest").text
s = bs.BeautifulSoup(b, features="html.parser")

if "/selectlang.php?id=" in b:
    l = b.split("/selectlang.php?id=")[1].split('"')[0]
    u = f"https://uupdump.net/download.php?id={l}&pack=es-es&edition=professional"
    print(u)
    b = r.get(u).text
    s = bs.BeautifulSoup(b, features="html.parser")
    print(s)
    dr.get(u)
    b = dr.find_element_by_class_name('ui fluid right labeled icon primary button')

And this is the error:

uupdump.py:17: DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  b = dr.find_element_by_class_name('ui fluid right labeled icon primary button')
Traceback (most recent call last):
  File "C:\Users\Aritz\Downloads\thign\uupdump.py", line 17, in <module>
    b = dr.find_element_by_class_name('ui fluid right labeled icon primary button')
  File "C:\Users\Aritz\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 760, in find_element_by_class_name
    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\Users\Aritz\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 1244, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "C:\Users\Aritz\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Aritz\AppData\Roaming\Python\Python310\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".ui fluid right labeled icon primary button"}

I want to use Selenium to find a button by its class name from uupdump.net, to download the latest version zip file.

Screenshot:

[HTML button image]


Solution

  • As per the HTML:

    HTML

    To identify the clickable element with text as Create download package you can use either of the following Locator Strategies:

    • Using xpath:

      b = dr.find_element(By.XPATH, "//button[@class='ui fluid right labeled icon primary button' and contains(., 'Create download package')]")
      

    Ideally to click on the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

    • Using XPATH:

      b = WebDriverWait(dr, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='ui fluid right labeled icon primary button' and contains(., 'Create download package')]")))
      
    • Note: You have to add the following imports :

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC