3 回答

TA貢獻1765條經驗 獲得超5個贊
該頁面需要時間才能完全加載,因此您無法獲得您想要的值。
獲取所有郵政編碼 Induce WebDriverWait() 和 wait for visibility_of_all_elements_located()
要從元素中獲取最后一個子元素,您可以誘導 javascript 執行程序或分割線來獲取唯一的郵政編碼。
driver.get("https://www.craispesaonline.it/provincia/treviso")
search=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,'//address//p[@class="text-lowercase m-0 ng-binding"]')))
for postcode in search:
print(driver.execute_script('return arguments[0].lastChild.textContent;', postcode))
您需要導入以下庫。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
控制臺輸出:
0422/710092
0422 452388
0422/958833
0423/689003
0422/853881
0422/969047
0423/564126
0423/650073
0423/723434
0423/942150
0438/500484
0423/868496
0438/898282
0483801679
0422/832603
0423/470063
0423/755164-23
0438/492409
0438/893369
0422/791529
0423/302959
0423/301381
0423-603754
0423/609936
0423/609151
0423480340
0438/781107
0423/670593
0423/81743
0423/81534
0423/972091
0423/451941
0422/912384
0423/620803
0423/621383
使用splitlines()的相同輸出
driver.get("https://www.craispesaonline.it/provincia/treviso")
search=WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,'//address//p[@class="text-lowercase m-0 ng-binding"]')))
for postcode in search:
print(postcode.text.splitlines()[-1].split("|")[-1].strip()) #last element which is postcode

TA貢獻1786條經驗 獲得超13個贊
要完成前面的答案,您可以使用一個 XPath 表達式獲取可以送貨的商店的郵政編碼:
//div[@class="row province-cms-content-store-row ng-scope"][./div[@ng-if="store.shippingEnabled == true"]]//meta[@itemprop="postalCode"]/@content
硒代碼:
driver.get("https://www.craispesaonline.it/provincia/treviso")
postcodes = WebDriverWait(driver,20).until(EC.visibility_of_all_elements_located((By.XPATH,'//div[@class="row province-cms-content-store-row ng-scope"][./div[@ng-if="store.shippingEnabled == true"]]//meta[@itemprop="postalCode"]'))).get_attribute("content")
輸出:29個郵政編碼
['31038']
['31038']
['31047']
['31050']
['31030']
...

TA貢獻1921條經驗 獲得超9個贊
要僅提取可以送貨的商店的郵政編碼,您可以誘導WebDriverWait并且visibility_of_all_elements_located()
您可以使用以下內容xpath基于定位策略:
使用
CSS_SELECTOR
:
driver.get("https://www.craispesaonline.it/provincia/treviso")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "http://a[@class='cl-accept']"))).click()
driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "http://h2[contains(., 'Potrai scegliere di ricevere la tua spesa in due modi:')]"))))
addresses = [my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "http://input[@value='Consegna']//preceding::address[1]//p[@class='text-lowercase m-0 ng-binding']")))]
for address in addresses:
? ? print(re.findall(r"\b\d{5}\b", address))
控制臺輸出:
['31038']
['31038']
['31047']
['31050']
['31030']
['31031']
['31034']
['31014']
['31035']
['31010']
['31010']
['31036']
['31037']
['31037']
['31050']
['31050']
['31044']
['31044']
['31044']
['31044']
['31044']
['31023']
['31058']
['31040', '81743']
['31049']
['31050']
['31020']
['31040']
['31040']
注意:您必須添加以下導入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
添加回答
舉報