我是 selenium 的新手,我試圖從網站上找到一部分文本(“著作權”)。如果存在,程式將列印“成功”,否則將列印“失敗”。有一個問題:我不知道不知道如何定位文本的那部分。沒有類,沒有 id,我沒有 CSS 中的代碼。我絕對什么都不知道。
這是我寫的代碼,我做了一些嘗試
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
PATH = Service("/Users/fscozano/documenti/chromedriver-2.exe")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://apod.nasa.gov/apod/random_apod.html")
try:
# search1 = driver.find_element(By.XPATH, "/html/body/center[2]/b[2]")
copyr = driver.find_element(By.NAME, "Copyright").text
# search = WebDriverWait(driver, 1).until(
print(copyr)
print("success")
except:
print("failed")
time.sleep(3)
如果我什么都不知道并且它是較大文本的一部分,我應該如何找到“著作權”?您可以親自查看網站并找出問題所在
uj5u.com熱心網友回復:
您的代碼/方法存在一些問題。
您想要的文本位于 IFRAME 內。要讓 Selenium 看到 IFRAME 內部,您需要將背景關系切換到該 IFRAME。最佳做法是等待 IFRAME 可用,然后切換到它。請參閱檔案。
進入該 IFRAME 后,您將搜索所需的元素。一個問題是你沒有明確定義你想要的輸出。您的代碼正試圖
.text從“著作權”元素(不存在)中檢索。每次頁面重新加載時,都會顯示不同的影像,并且...- 它可能受著作權保護,也可能不受著作權保護
- 著作權可能是也可能不是超鏈接
- 著作權可能包含一個或多個鏈接
為了讓一切變得更簡單,我將給你代碼來獲取 CENTER 標簽中的所有文本,當它存在時,包含“著作權”文本,例如,
Our Rotating Earth Video Credit & Copyright: Bartosz Wojczyński您應該使用
.find_elements而不是try-catch因為它不涉及拋出和捕獲例外。例外應該是例外的(罕見的),而不是(通常)用作流量控制。
這是更新后的代碼。
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://apod.nasa.gov/apod/random_apod.html")
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID,'apod')))
copyr = driver.find_elements(By.XPATH, "//center[.//b[contains(.,'Copyright')]]")
if copyr:
print(copyr)
print("success")
else:
print("failed")
我試了很多次,它奏效了,但可能有一些例子也打破了這一點。
uj5u.com熱心網友回復:
- 您使用了錯誤的定位器
- 您應該在訪問它之前添加一個等待以使該元素完全加載
- 您嘗試訪問的元素不在視圖中,您需要向下滾動頁面
這應該有效:
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.action_chains import ActionChains
PATH = Service("/Users/fscozano/documenti/chromedriver-2.exe")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
wait = WebDriverWait(driver, 20)
actions = ActionChains(driver)
driver.get("https://apod.nasa.gov/apod/random_apod.html")
credit = wait.until(EC.presence_of_element_located((By.XPATH, "//b[contains(text(),'Credit')]/following-sibling::a")))
actions.move_to_element(credit).perform()
time.sleep(0.5)
credits = driver.find_elements(By.XPATH, "//b[contains(text(),'Credit')]/following-sibling::a")
for credit in credits:
print(credit.text)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/391811.html
