簡體   English   中英

Selenium 找不到 id 元素<div>

[英]Selenium can't find id element in <div>

我正在嘗試使用 python selenium 從網頁中獲取 HTML 文本。 但是 Selenium 似乎無法定位該元素。 不確定我是否做錯了什么,正在這里尋找一些答案。

請在下面查看我的代碼的一部分:

wait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'current_address_name')))
full_address = driver.find_element_by_id('current_adress_name')
street_address = full_address.text.split('(S)')[0]
print('Street Address: ' + str(street_address))
all_street_address.append(street_address)

這是錯誤消息(超時)。 據說是因為它找不到元素:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/Volumes/GoogleDrive/My Drive/PycharmProjects/googlestuff/gsheet_test_mod.py", line 121, in web_extraction
    wait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'current_address_name')))
  File "/Users/cadellteng/googstuff/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

這是 HTML 代碼的一部分:

<div id="current_address_name" style="display:none">4 Third Avenue (S)266576</div>

關於這件事的一點背景。 這部分元素似乎不是頁面上的可見元素,因為當我將鼠標放在元素上時,它不會突出顯示頁面的任何部分。 是不是因為 Selenium 無法提取未顯示的元素? 或者我在這里做錯了什么? 請指教。

以防萬一你需要完整的代碼,這是頁面: 新加坡街道目錄

visibility_of_element_located方法用於“檢查元素是否存在於頁面的 DOM 上並且可見”。 .

顯然該元素不可見,因為該元素設置了style="display:none"

你可以使用presence_of_element_located代替,它只會檢查元素是否存在於DOM樹中:

wait(driver, 10).until(EC.presence_of_element_located((By.ID, 'current_address_name')))

修復您的代碼的其他一些問題,完整的最小的、可重現的示例將是:

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

all_street_address = []

driver = webdriver.Chrome()
wait = WebDriverWait

driver.get("https://www.streetdirectory.com/sg/4-third-avenue-266576/1_27869.html")

wait(driver, 10).until(EC.presence_of_element_located((By.ID, 'current_address_name')))
full_address = driver.find_element_by_id('current_address_name')
street_address = full_address.get_attribute('innerHTML').split('(S)')[0]
print('Street Address: ' + str(street_address))
all_street_address.append(street_address)

暫無
暫無

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

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