如果商品有貨,我有以下代碼列印“有貨”:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options=Options()
driver=webdriver.Chrome(options=options)
#Directing to site
driver.get("https://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo Switch&qid=1651147043&sr=8-3");
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/span/form/div[3]/span[1]/span/input"))).click()
condition= print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@id='availability']//span[contains(text(),'In stock.')]"))).get_attribute("innerHTML"))
if condition == 'In stock.':
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/div[3]/div[6]/div[4]/div[1]/div[2]/div/div/div/div/div/div/form/div/div/div/div/div[3]/div/div[14]/div[1]/span/span/span/input"))).click()
else:
pass
如果商品“有貨”,我如何告訴 selenium“添加到購物籃”?
我想要:
轉到此網址:https ://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo Switch&qid=1651147043&sr=8-3
檢查右側的文字是否顯示“有貨。”。
如果有庫存,我想將其添加到購物籃中。
我通過檢查->復制->復制完整的x路徑得到了xpath。
uj5u.com熱心網友回復:
理想情況下,您應該使用相對 XPath。
我們使用presence_of_all_elements_locatedwhich 將回傳一個list of web elementsif found,如果沒有,那么它將是an empty list,所以in_stock 是一個 web 元素串列。現在,len()是一種方法,它將為我們提供串列中存在多少 Web 元素的輸出。因此,邏輯類似于,如果串列有任何內容,那么它必須是In stock-> Now add to basket,否則它必須存在<0,或者0在這種情況下"In stock" 將不存在,我們不會將任何內容添加到我們的購物籃中。
下面的代碼轉到 URL,如果存在則查找"In stock" 文本,"Add to basket"如果不只是.tear downbot
代碼:
driver.maximize_window()
wait = WebDriverWait(driver, 30)
driver.get("https://www.amazon.co.uk/Nintendo-Switch-OLED-Model-Neon/dp/B098TNW7NM/ref=sr_1_3?keywords=Nintendo Switch&qid=1651147043&sr=8-3")
try:
wait.until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[2]/span/form/div[3]/span[1]/span/input"))).click()
print("clicked on accept cookies successfully")
except:
pass
in_stock = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//div[@id='availability']//span[contains(text(),' In stock. ')]")))
try:
if len(in_stock) > 0:
print("In stock must be present.")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#add-to-cart-button"))).click()
print("Clicked on add to cart button")
else:
print("In stock must be not present")
except:
print("Something went wrong")
pass
進口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
uj5u.com熱心網友回復:
假設您的代碼的最后一行回傳“in stock”
condition=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@id='availability']//span[contains(text(),'In stock.')]"))).get_attribute("innerHTML")
if condition == 'in stock':
# logic to add to cart
else:
pass
有關添加專案/與按鈕互動的邏輯,請查看:https ://pythonspot.com/selenium-click-button/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/468324.html
