【问题标题】:Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="username"]"} error in python消息:没有这样的元素:无法找到元素:python 中的 {"method":"css selector","selector":"[id="username"]"} 错误
【发布时间】:2021-09-01 06:46:23
【问题描述】:

当我登录页面时发现这些错误

selenium.common.exceptions.NoSuchElementException: 消息:没有这样的 元素:无法找到元素:{“方法”:“css selector","selector":"[id="username"]"} (会话信息: 铬=93.0.4577.63)

C:\Users\avesh\Desktop\text>[6672:6336:0901/120328.999:ERROR:device_event_log_impl.cc(214)] [12:03:28.999] USB:usb_device_handle_win.cc:1048 读取失败 描述符 fr m 节点连接:连接到系统的设备是 不工作。 (0x1F) [6672:6336:0901/120329.103:ERROR:device_event_log_impl.cc(214)] [12:03:29.103] USB:usb_device_handle_win.cc:1048 读取失败 来自节点连接的描述符:连接到系统的设备是 不工作。 (0x1F)

我的代码是

from selenium import webdriver
from getpass import getpass

username = input("name:")

password = getpass("Enter your password")

driver=webdriver.Chrome(executable_path ="C:\\av\\chromedriver.exe")

driver.get("https://services.gst.gov.in/services/login")

username_textbox=driver.find_element_by_id("username")
username_textbox.send_keys(username)

password_textbox=driver.find_element_by_id("user_pass")
password_textbox.send_keys(password)

login_button = driver.find_element_by_xpath("//*button[contains(., 'Login')").click()
login_buttion.submit()

【问题讨论】:

    标签: python python-3.x web-scraping


    【解决方案1】:

    在为窗口中的元素输入值之前,您需要允许 Selenium 能够找到这些元素。很多时候,元素需要一些时间才能出现在页面上(可能是由于 ajax 或网络延迟)。

    所以你需要等待一段时间,Selenium 提供了Waits 的功能。

    在此处阅读有关实施不同类型等待的更多信息 - Link

    你可以修改你的脚本

    from selenium import webdriver
    from getpass import getpass
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    username = input("name:")
    
    password = getpass("Enter your password")
    
    driver=webdriver.Chrome(executable_path ="C:\\av\\chromedriver.exe")
    
    driver.get("https://services.gst.gov.in/services/login")
    
    wait = WebDriverWait(driver, 20)
    
    wait.until(EC.visibility_of_element_located((By.ID, 'username')))
    
    username_textbox=driver.find_element_by_id("username")
    username_textbox.send_keys(username)
    
    password_textbox=driver.find_element_by_id("user_pass")
    password_textbox.send_keys(password)
    
    login_button = driver.find_element_by_css_selector("button[class='btn  btn-primary']")
    
    login_buttion.submit() ## or login_button.click()
    
    driver.quit()
    

    另外,还有一件事,我去过这个网站很多次,一旦你添加了详细信息,就会出现一个验证码,没有它这个登录详细信息将不被接受。

    因此,您还需要解决页面上正在使用的验证码。

    【讨论】:

    • 任何人都知道是否通过声音读取验证码并自动填充文本框。怎么样?
    • 你不能那样做。在网页上使用 CAPTCHA 的全部意义在于它不能被机器自动化。有一些图书馆可以帮助你,但这是值得怀疑的。
    • 会出现一个验证码,您必须使用网站上提供的验证码的声音提取验证码中的文本。链接:-services.gst.gov.in/services/login
    • 在用户名验证码中添加任何字符时会出现
    【解决方案2】:

    基本上,您正在尝试获取用户名输入,然后尝试将该用户名发送到 UI,我已经优化了您的代码,并使用了几个验证点,例如如果用户没有提供任何内容并且您还有一个验证可以修改的是(用户名应该超过4个字符):

    driver = webdriver.Chrome(driver_path)
    driver.maximize_window()
    driver.get("https://services.gst.gov.in/services/login")
    wait = WebDriverWait(driver, 20)
    
    username = input("name:")
    user_name = wait.until(EC.visibility_of_element_located((By.ID, "username")))
    
    if username == "":
        print("user name was not entered correctly")
    
    if len(username) > 4:
        user_name.send_keys(username)
    

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 2021-12-20
      • 2020-09-30
      • 2023-03-12
      相关资源
      最近更新 更多