我正在按照使用 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 進行了更改以防止抓取正常作業?
本書章節的鏈接在這里。
我很感激你能給我的任何建議!
uj5u.com熱心網友回復:
您不能將多個類傳遞給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')
如果你真的想同時使用這兩個類,那么看看這個答案,它詳細解釋了事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/492642.html
