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, "//a[@class='cl-accept']"))).click()
driver.execute_script("return arguments[0].scrollIntoView(true);", WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//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, "//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
添加回答
举报