即使元素确实存在,我仍然在 selenium 中收到 NoSuchElementException
I keep getting a NoSuchElementException in selenium even though the element DOES exist
这是我第一个使用 selenium 的抓取项目。我正在尝试使用 this website.
下载保存在列表中的几个 reddit 视频
如您所见,它显示了一个输入标签,我需要在其中输入视频或 gif 的 url,然后转到下载页面。该输入标签有一个 class 名称 form-control form-control-lg form-control-alternative
。因此,当我尝试获取该元素以便用 Python 中的列表中的 link 填充它时,它显示 selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .form-control form-control-lg form-control-alternative
错误。
您可以使用开发人员工具自行检查,您会看到该输入标签具有 class。
这是我的代码:
for gif in gif_list:
driver.get('https://keepv.id/reddit-video-downloader')
input_tag = driver.find_element_by_class_name('form-control form-control-lg form-control-alternative')
input_tag.send_keys(gif)
go_button = driver.find_element_by_class_name('btn btn-danger')
go_button.click()
second_button = driver.find_element_by_class_name('btn btn-danger sheen waggle spin')
second_button.click()
WebDriverWait(driver, 5).until(expected_conditions.presence_of_element_located((By.CLASS_NAME, 'row')))
download_button = driver.find_element_by_class_name('btn btn-lg btn-danger mb-3 shadow vdlbtn')
download_button.click()
gif_url = driver.current_url()
download_gif(gif_url)
find_element_by_class_name()
接受单个 class 仅使用 css selector
代替。
driver.find_element_by_css_selector(".form-control.form-control-lg.form-control-alternative").send_keys(gif)
driver.find_element_by_css_selector(".btn.btn-danger").click()
或者您可以使用 by_id
driver.find_element_by_id("dlURL").send_keys(gif)
driver.find_element_by_id("dlBTN1").click()
理想情况下,您应该使用 WebDriverWait
() 并等待 element_to_be_clickable
() 并遵循 css selecor
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".form-control.form-control-lg.form-control-alternative"))).send_keys(gif)
点击开始按钮
WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn.btn-danger"))).click()
您需要导入以下库
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
这是我第一个使用 selenium 的抓取项目。我正在尝试使用 this website.
下载保存在列表中的几个 reddit 视频如您所见,它显示了一个输入标签,我需要在其中输入视频或 gif 的 url,然后转到下载页面。该输入标签有一个 class 名称 form-control form-control-lg form-control-alternative
。因此,当我尝试获取该元素以便用 Python 中的列表中的 link 填充它时,它显示 selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .form-control form-control-lg form-control-alternative
错误。
您可以使用开发人员工具自行检查,您会看到该输入标签具有 class。
这是我的代码:
for gif in gif_list:
driver.get('https://keepv.id/reddit-video-downloader')
input_tag = driver.find_element_by_class_name('form-control form-control-lg form-control-alternative')
input_tag.send_keys(gif)
go_button = driver.find_element_by_class_name('btn btn-danger')
go_button.click()
second_button = driver.find_element_by_class_name('btn btn-danger sheen waggle spin')
second_button.click()
WebDriverWait(driver, 5).until(expected_conditions.presence_of_element_located((By.CLASS_NAME, 'row')))
download_button = driver.find_element_by_class_name('btn btn-lg btn-danger mb-3 shadow vdlbtn')
download_button.click()
gif_url = driver.current_url()
download_gif(gif_url)
find_element_by_class_name()
接受单个 class 仅使用 css selector
代替。
driver.find_element_by_css_selector(".form-control.form-control-lg.form-control-alternative").send_keys(gif)
driver.find_element_by_css_selector(".btn.btn-danger").click()
或者您可以使用 by_id
driver.find_element_by_id("dlURL").send_keys(gif)
driver.find_element_by_id("dlBTN1").click()
理想情况下,您应该使用 WebDriverWait
() 并等待 element_to_be_clickable
() 并遵循 css selecor
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".form-control.form-control-lg.form-control-alternative"))).send_keys(gif)
点击开始按钮
WebDriverWait(browser,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,".btn.btn-danger"))).click()
您需要导入以下库
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By