【问题标题】:Locating a website element using selenium webdriver for automation task使用 selenium webdriver 定位网站元素以执行自动化任务
【发布时间】:2021-04-06 15:50:24
【问题描述】:

我正在使用 selenium webdriver 进行一个项目,该项目需要我找到一个元素并单击它。该程序首先进入一个网站,点击搜索栏,输入预先输入的字符串,然后点击回车,至此一切都成功了。我希望它做的下一件事是找到搜索的第一个结果并单击它。这部分我遇到了麻烦。到目前为止,我已经成功定位了所有元素,但由于弹出错误,我无法找到这个元素。这是我的代码:

from selenium import webdriver
import time

trackname = input("Track Name: ")

driver = webdriver.Chrome('D:\WebDrivers\chromedriver.exe')

driver.get('https://music.apple.com/us/artist/search/166949667')

time.sleep(2)

searchbox = driver.find_element_by_tag_name('input')
searchbox.send_keys(trackname)
from keyboard import press
press('enter')
time.sleep(2)

result = driver.find_element_by_id('search-list-lockup__description')
result.click()

我尝试过以其他方式定位元素,但它不起作用,我猜问题是在搜索后我必须告诉它在该页面上搜索但我不确定。这是错误:

Traceback (most recent call last):
  File "D:\Python Projekti\iTunesDataFiller\iTunesDataFiller.py", line 18, in <module>
    result = driver.find_element_by_id('search-list-lockup__description')
  File "D:\Python App\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 360, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
  File "D:\Python App\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
    return self.execute(Command.FIND_ELEMENT, {
  File "D:\Python App\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "D:\Python App\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, 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":"[id="search-list-lockup__description"]"}
  (Session info: chrome=89.0.4389.114)


Process finished with exit code 1

我该怎么办?

【问题讨论】:

    标签: python selenium webdriver


    【解决方案1】:

    这可能是由于您要访问的元素不可用。 例如,假设您加载页面,硒无法看到该元素。所以基本上你试图点击一个不可见的元素。 我建议使用这个模板来确保在访问元素之前加载它们。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import NoSuchElementException
    waitshort = WebDriverWait(driver,.5)
    wait = WebDriverWait(driver, 20)
    waitLonger = WebDriverWait(driver, 100)
    visible = EC.visibility_of_element_located
    driver =  webdriver.Chrome(executable_path='path')
    driver.get('link')
    element_you_want_to_access = wait.until(visible((By.XPATH,'xpath')))
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多