如果项目是 'in stock',我如何告诉 selenium 添加到购物车?
How do I tell selenium to add to basket if item is 'in stock'?
如果商品有货,我有以下代码打印 'in stock':
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
如果项目是 'in stock',我如何告诉 selenium 'add to basket'?
我想:
-
检查右侧的文字是否显示 'In stock.'。
如果有货,我想把它加入购物车。
我通过检查->复制->复制完整的 x 路径获得了 xpath。
假设您的代码的最后一行 returns '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
有关添加带有按钮的 item/interacting 的逻辑,请查看以下内容:https://pythonspot.com/selenium-click-button/
最好使用相对 XPath。
我们正在使用 presence_of_all_elements_located
,如果找到,它将 return 一个 list of web elements
,如果没有,它将是 an empty list
,所以 in_stock
是一个列表的网络元素。现在,len()
是一种方法,它将为我们提供列表中存在多少 Web 元素的输出。因此,逻辑类似于,如果列表有任何内容,那么它必须是 In stock
-> 现在 add to basket
,否则在这种情况下它必须是 <0
或 0
"In stock"
不会出现,我们也不会在购物篮中添加任何东西。
下面的代码转到 URL,寻找 "In stock"
text 如果存在则 "Add to basket"
如果不是 tear down
bot
.
代码:
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
如果商品有货,我有以下代码打印 'in stock':
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
如果项目是 'in stock',我如何告诉 selenium 'add to basket'?
我想:
检查右侧的文字是否显示 'In stock.'。
如果有货,我想把它加入购物车。
我通过检查->复制->复制完整的 x 路径获得了 xpath。
假设您的代码的最后一行 returns '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
有关添加带有按钮的 item/interacting 的逻辑,请查看以下内容:https://pythonspot.com/selenium-click-button/
最好使用相对 XPath。
我们正在使用 presence_of_all_elements_located
,如果找到,它将 return 一个 list of web elements
,如果没有,它将是 an empty list
,所以 in_stock
是一个列表的网络元素。现在,len()
是一种方法,它将为我们提供列表中存在多少 Web 元素的输出。因此,逻辑类似于,如果列表有任何内容,那么它必须是 In stock
-> 现在 add to basket
,否则在这种情况下它必须是 <0
或 0
"In stock"
不会出现,我们也不会在购物篮中添加任何东西。
下面的代码转到 URL,寻找 "In stock"
text 如果存在则 "Add to basket"
如果不是 tear down
bot
.
代码:
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