簡體   English   中英

Python WebDriver:find_element() 找不到元素

[英]Python WebDriver: find_element() not finding the element

我正在按照使用 Python 自動化無聊的東西的第 12 章學習 Web Scraping 的基礎知識,但是我遇到了 find_element() 方法的問題。 當我使用該方法查找類名為“card-img-top cover-thumb”的元素時,該方法不返回任何匹配項。 但是,該代碼確實適用於本書中示例以外的 URL。

為了讓代碼做任何事情,我不得不對編寫的代碼進行相當多的更改。 我已經在 GitHub HERE上發布了完整的代碼,但總結一下:

  • 這本書說要使用“find_element_by_*”方法,但這些方法會產生折舊消息,指示我改用 find_element()。

  • 要使用這種其他方法,我導入“By”。

  • 我還從“Selenium.Webdriver.Chrome.Service”導入“服務”,因為 Chromedriver 無法正常工作。

  • 我還使用 Webdriver.ChromeOptions() 定義了選項,這些選項隱藏了有關故障設備的某些錯誤消息,顯然你應該忽略這些錯誤消息?

  • 我將書中的代碼放入帶有“url”和“classname”參數的函數中,這樣我就可以測試不同的 url,而無需重復編輯代碼。

這是代碼的“業務部分”:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service  
from selenium.webdriver.common.by import By

s=Service(r'C:\Users\antse\AppData\Local\Chrome_WebDriver\chromedriver.exe')

op = webdriver.ChromeOptions()
op.add_experimental_option('excludeSwitches', ['enable-logging'])

def FNC_GET_CLASS_ELEMENT_FROM_PAGE(URL, CLASSNAME):       
    browser = webdriver.Chrome(service = s, options = op)
    browser.get(URL)
    try:  
        elem = browser.find_element(By.CLASS_NAME, CLASSNAME)
        print('Found <%s> element with that class name!' % (elem.tag_name))
    except:
        print('Was not able to find an element with that name.')

FNC_GET_CLASS_ELEMENT_FROM_PAGE('https://inventwithpython.com', 'card-img-top cover-thumb')

預期輸出:找到具有該類名的 <img> 元素!

由於當我查看 Wikipedia 之類的網站時代碼確實有效,我想知道是否對頁面的 html 進行了更改以防止抓取正常工作?

本書章節的鏈接在這里

我很感激你能給我的任何建議!

您不能將多個類傳遞給find_element 只有一個可以在場。 所以替換這個:

FNC_GET_CLASS_ELEMENT_FROM_PAGE('https://inventwithpython.com', 'card-img-top cover-thumb')

有了這個:

FNC_GET_CLASS_ELEMENT_FROM_PAGE('https://inventwithpython.com', 'card-img-top')

如果你真的想同時使用這兩個類,那么看看這個答案,它詳細解釋了事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM