【问题标题】:Selenium not finding particular elements硒没有找到特定的元素
【发布时间】:2016-11-03 13:46:21
【问题描述】:

在执行 flickr.com 搜索 (https://www.flickr.com/search/?text=lake) 后,我正尝试导航到“人物”部分。

我无法在<div id="content">(HTML 图像顶部的第 6 行)中找到元素。基本上无论我尝试什么,都会抛出 NoSuchElementException

#! python3

# Saves photos to file from flickr.com using specified search term

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

logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - \
%(levelname)s - %(message)s")

def flickr_images():
    try:
        search_term, number_images = sys.argv[1:]
    except:
        print("Something went wrong. Command line input must be of \
    format: 'filename searchterm numbermessages'")
        return

    driver = webdriver.Firefox()
    driver.get("https://www.flickr.com/")

    # wait for page to load
    WebDriverWait(driver, 10).until(EC.presence_of_element_located(\
        (By.ID, "search-field")))

    # find search text field and input search term
    driver.find_element_by_id("search-field").send_keys(search_term)

    # find and click search button
    driver.find_element_by_class_name("search-icon-button").click()

    WebDriverWait(driver, 5)

    content = driver.find_element_by_id("content")
    content.find_element_by_class_name("search-subnav-content")

if __name__ == "__main__":
   flickr_images()

【问题讨论】:

  • 一个问题:不应该是 'driver.find_element_by_class_name("search-subnav-content")' 而不是 'content.find_element_by_class_name("search-subnav-content")'?
  • 你希望WebDriverWait(driver, 5) 做什么?
  • 错误的成员和子成员。如果不抓取 main_class,则无法处理子类。

标签: python selenium selenium-webdriver web-scraping


【解决方案1】:

我会直接导航到搜索结果页面并等待结果出现

driver.get("https://www.flickr.com/search/?text=" + search_term)

# wait for the search results to appear
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "search-photos-results")))

content = driver.find_element_by_id("content")
content.find_element_by_class_name("search-subnav-content")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2020-08-17
    相关资源
    最近更新 更多